【问题标题】:Check if string in input box is equal to varbinary(max) in SQL SERVER, PHP | SQL SERVER 2012检查输入框中的字符串是否等于 SQL SERVER、PHP 中的 varbinary(max) | SQL 服务器 2012
【发布时间】:2019-08-11 10:59:51
【问题描述】:

我的登录页面有问题。

我正在将我的密码从字符串转换为varbinary(max),我现在的问题是如何比较或验证我输入的用于登录的字符串是否等于表中存储的数据。

示例。

我的密码转换前的值是12345。通过CONVERT(varbinary(max),'12345') 转换后,数据现在反映为0x3132333435

如何验证我在输入框中输入的密码(12345)是否与转换为 varbinary(max) 0x3132333435 的值相似?

我正在使用 SQL SERVER 2012、XAMPP 和 SQLSRV 进行连接。

非常感谢您。

这是我的login.php

<?php
    session_start();
    include 'includes/conn.php';

    if (isset($_POST['login'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];

        $sql = "
SELECT username,cast(password as varchar(max)) as password 
FROM usermasterfile 
WHERE username ='$username'";

        include 'query/sqlsrv_query-global.php';

        if (sqlsrv_num_rows($query) < 1) {
            $_SESSION['error'] = 'Cannot find account with the username';
        } else {
            $row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
            if ($password == $row['password']) {
                $_SESSION['employeeidno'] = $row['employeeidno'];
            }
            else{
                $_SESSION['error'] = 'Incorrect password';
            }
        }
    }
    else{
        $_SESSION['error'] = 'Input credentials first';
    }

    header('location: index.php');
?>

编辑:已修复!

SELECT *,cast(password as varchar(max)) as maxpassword 
FROM usermasterfile 
WHERE username ='$username'";````

【问题讨论】:

  • @Dharman 感谢您的提醒。我刚刚修复了登录,我现在要重新编写所有代码以避免 SQL 注入。

标签: php sql sql-server sqlsrv


【解决方案1】:

您可以将 varbinary 转换回 varchar 值

SELECT cast(0x3132333435 as varchar(max)) as varchar_value

varchar_value
-------------
12345

因此,请在代码的比较部分使用上述转换。

【讨论】:

  • 我将如何在 php 中实现它? $password = $_POST['password'];?
  • @pjustindaryll 对不起,我不知道你如何在 php 中管理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 2011-03-18
  • 1970-01-01
相关资源
最近更新 更多