当我使用 PHP 中的变量构建查询字符串时,它似乎不起作用。我目前的查询是:
$u = "admin";
$hash = password_hash("password", PASSWORD_DEFAULT);
$set_login = "INSERT INTO users (username, password) VALUES ({$u}, {$hash})";
*我正在脚本中进一步执行查询
如果我用{$u}
它代表的字符串文字替换,并{$hash}
只用密码的字符串文字替换,例如password
,查询工作正常。但是,当我引入变量时,它就会中断。我试过分解查询字符串并使用连接运算符:
$set_login = "INSERT INTO users (username, password) VALUES ( " . $u . ", " . $hash . ")";
这也不起作用。然后我认为它可能与哈希有关,所以我将代码修改为(用于测试):
$u = "admin";
$p = "password";
$set_login = "INSERT INTO users (username, password) VALUES ({$u}, {$p})";
这也不起作用。
最好的解决方案是使用准备好的语句,它非常简单。
这是您将如何使用准备好的语句来做到这一点
mysqli
<?php
$u = "admin";
$hash = password_hash("password", PASSWORD_DEFAULT);
$set_login = "INSERT INTO users (username, password) VALUES (?,?)";
$query = $ConnectionString->prepare($set_login);
$query->bind_param("ss",$u,$hash);
if($query){
echo "success";
}else{
error_log("error".$ConnectionString->error);
}
?>
PDO
<?php
$u = "admin";
$hash = password_hash("password", PASSWORD_DEFAULT);
$query = $ConnectionString->prepare("INSERT INTO users (username, password) VALUES (?,?)")->execute(array($u,$hash));
if ($query) {
echo "success";
} else {
error_log("error" . $ConnectionString->errorInfo());
}
?>
一些有用的资源。
注意:AS Jay 在他的评论中指出确保您在数据库中的密码字段大小至少为 60 个字符
在您的查询中,问题是您没有在引号周围包装字符串
您的查询应该是:
$set_login = "INSERT INTO admin (uname, upass) VALUES ('{$u}', '{$hash}')";
但这不是最好的推荐方法,您应该使用上述使用准备好的语句的方法之一。
这就是为什么你应该:Bobby Tables
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句