Prepared语句将参数视为列名

时间:2017-06-19 05:15:20

标签: php mysql mysqli prepared-statement

编辑:我认为错误在代码的不同部分。显然,在phpmyadmin中测试预准备语句时,phpmyadmin只是对参数执行搜索替换,而不是在PDO中实际使用预准备语句。

我正在使用的PHP登录脚本使用mysqli来访问数据库。

脚本的一个关键部分是查询users表以返回密码哈希值。

$stmt = $mysqli->prepare("SELECT password FROM users WHERE username = ?");
$stmt->bind_param("s", $_POST["username"]);
$stmt->execute();
$stmt->bind_result($hash);

我在表中有一行itcha2作为用户名,但当我将itcha2作为用户名传递给脚本时,它不返回任何行。

当我将查询输入phpmyadmin SELECT * FROM users WHERE username = :user,将itcha2绑定为:user时,phpmyadmin会返回错误#1054 - Unknown column 'itcha2' in 'where clause'

据我了解,来自预准备语句的参数绝不应被解释为列名。

发生了什么事?

我们非常感谢任何帮助。

0 个答案:

没有答案