检查输入框中的字符串是不是等于 SQL SERVER、PHP 中的 varbinary(max) | SQL 服务器 2012
Posted
技术标签:
【中文标题】检查输入框中的字符串是不是等于 SQL SERVER、PHP 中的 varbinary(max) | SQL 服务器 2012【英文标题】: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 注入。 【参考方案1】:您可以将 varbinary 转换回 varchar 值
SELECT cast(0x3132333435 as varchar(max)) as varchar_value
varchar_value
-------------
12345
因此,请在代码的比较部分使用上述转换。
【讨论】:
我将如何在 php 中实现它?$password = $_POST['password'];
?
@pjustindaryll 对不起,我不知道你如何在 php 中管理。以上是关于检查输入框中的字符串是不是等于 SQL SERVER、PHP 中的 varbinary(max) | SQL 服务器 2012的主要内容,如果未能解决你的问题,请参考以下文章