这是用于学校项目。我是PHP和MySQL的新手。我试图用一个字符串参数在PHP中编写一个函数,该参数将成为该函数内部的prepare()语句中使用的SQL查询的列名。
这是代码:
function checkCredentials($dbFieldToCheck) {
$statement = $conn->prepare("SELECT id FROM user WHERE ".$dbFieldToCheck." = ? AND password = PASSWORD(?)");
if (!$statement) die("Prepare failed: (" . $conn->errno . ") " . $conn->error);
$statement->bind_param("ss", $_POST["username/email"], $_POST["password"]);
$statement->execute();
$result = $statement->get_result();
$row = $result->fetch_assoc();
return $row;
}
然后,我在两个不同的变量中两次调用此函数:
$row1 = checkCredentials('email');
$row2 = checkCredentials('username');
最后,我对这两个变量进行了处理(我猜这里没有用)。
我尝试了不同的方式在SQL语句中写入参数,也尝试了不同的方式在函数调用中写入参数。现在我什至开始认为我的函数根本没有被调用...
如果我只是用硬编码的列名在函数内部执行两次代码,那么我想要实现的目标就可以实现。但这不是很好:)
很感谢任何形式的帮助。谢谢!
将提交的POST
数据和连接变量添加到函数的参数中。调用函数时,它将如下所示:
checkCredentials($dbFieldToCheck, $conn, $_POST["username/email"], $_POST["password"]);
您的函数将如下所示:
function checkCredentials(string $dbFieldToCheck, $conn, $username, $password) {
$statement = $conn->prepare("SELECT id FROM user WHERE ".$dbFieldToCheck." = ? AND password = PASSWORD(?)");
if (!$statement) die("Prepare failed: (" . $conn->errno . ") " . $conn->error);
$statement->bind_param("ss", $username, $password);
$statement->execute();
$result = $statement->get_result();
$row = $result->fetch_assoc();
return $row;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句