使用mysql password()函数将mysqli_查询转换为php中的准备语句
我在SELECT查询中使用mysql或mysqli password()函数对用户进行身份验证。 i、 e 我想将其转换为带有参数的准备语句。如何在准备好的语句中处理使用mysql password()函数将mysqli_查询转换为php中的准备语句,php,mysql,Php,Mysql,我在SELECT查询中使用mysql或mysqli password()函数对用户进行身份验证。 i、 e 我想将其转换为带有参数的准备语句。如何在准备好的语句中处理password()函数?password()函数是否出现在准备好的语句中,例如password(?)或参数中,例如password($var) 我以前在这里看到过类似的问题(),但它仍然没有得到解答 这一定是一个共同的问题,也许是时候再次提出它了。有人能帮忙吗?我需要更多的代码,你应该这样做 <?php $link = ne
password()
函数?password()函数是否出现在准备好的语句中,例如password(?)或参数中,例如password($var)
我以前在这里看到过类似的问题(),但它仍然没有得到解答
这一定是一个共同的问题,也许是时候再次提出它了。有人能帮忙吗?我需要更多的代码,你应该这样做
<?php
$link = new mysqli( /* connect */);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno .") "$mysqli->connect_error;
}
/* Prepared statement, stage 1: prepare */
if (!($stmt = $mysqli->prepare("SELECT * FROM `users` WHERE u_name=? AND u_pword=password(?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$stmt->bind_param("ss", $username, $password )) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
?>
希望能有帮助。如果是,请接受作为答案。
无论如何,正如有人建议的,您不应该使用PASSWORD()函数,而且,我会继续说,您应该使用PDO。这是值得的。只要SQL兼容,切换数据库就非常容易。即使不是,它仍然相对容易。该函数已被弃用,我认为您应该使用PHP哈希函数
从MySQL 5.7.6开始,此函数已被弃用,并将在将来的MySQL版本中删除。
但我不知道如何将MySQL函数用于参数化查询。我想如果您在绑定值中使用了“password('.$password.')”
,它将被引用为字符串。。另请注意,PASSWORD()用于MySQL服务器中的身份验证系统;您不应该在自己的应用程序中使用它谢谢,我自己也得出了这个结论。看来我的下一个问题应该是关于迁移到一个实时mysql数据库上的PHP哈希系统。我会看看,哦,在mysql函数中使用占位符也可以在参数化查询中工作。e、 g.从
表`where name=md5(?)`中选择*谢谢,克里斯,它们是有用的参考。您可以在允许表达式的任何位置使用?
作为占位符。为什么您认为PASSWORD()
的参数与查询的其他部分不同?谢谢您的帮助。此代码与我使用的代码类似,只是添加了错误消息。然而,它不会抛出任何错误消息,或者事实上,它也不会抛出任何结果。我添加了printf(“找到%d行。\n”,$stmt->受影响的行);但是没有返回任何内容。您确定之前使用password()函数存储的密码正确吗?
<?php
$link = new mysqli( /* connect */);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno .") "$mysqli->connect_error;
}
/* Prepared statement, stage 1: prepare */
if (!($stmt = $mysqli->prepare("SELECT * FROM `users` WHERE u_name=? AND u_pword=password(?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$stmt->bind_param("ss", $username, $password )) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
?>