这是一个学校项目。我是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语句中编写参数的不同方法,也可以通过不同的方式在函数调用中编写它。现在我甚至开始认为我的功能根本就没有被调用......
如果我只使用硬编码的列名执行两次函数内部的代码,我想要实现的是什么。但这并不好:)
非常感谢任何帮助。谢谢!
答案 0 :(得分:3)
向您的函数的参数添加提交的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;
}
答案 1 :(得分:0)
我的猜测是你的函数不知道$conn
,因为它没有在其范围内声明
你的功能应该像这样开始:
global $conn;
有关变量范围的更多信息,请参阅the manual。
编辑:
正如apokryfos在评论中指出的那样,不建议使用global
。最好将$conn
作为参数传递给checkCredentials
。
有关详细信息,请参阅the accepted answer to this question。引用:
函数调用不应该依赖于
以外的任何东西
答案 2 :(得分:0)
我猜您可以像这样修改代码:
$servername = "localhost:3306";//replace with your mysql server address
$username = "username";//replace with your mysql user
$password = "password";//replace with your mysql password
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
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;
}
checkCredentials('email');
将PHP与MYSQL结合使用并不复杂,本文档可以帮助您了解它们如何协同工作的基本概念 (http://www.w3schools.com/php/php_mysql_connect.asp)。