我正在使用准备好的语句对我的数据库执行 SELECT 查询,但是 SQL 语法的性质导致 MySQLi 出现问题。
当我尝试准备时:
SELECT user_id FROM Users WHERE email='?';
我收到一个错误
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement
我知道错误是由于在 ? 周围加上引号引起的 但问题是这些引号是 SQL 语法正确所必需的。如果我删除引号,准备好的语句可以工作,但数据库不会返回它应该返回的内容。
有什么我可以做的,或者这是界面的限制?如果这是一个限制,我该怎么做才能在准备好的语句安全的情况下执行此查询?
完整代码:
$email = $_POST["email"];
$sql = "SELECT user_id,fname,city,state,zip FROM Users WHERE email='?';";
$types = 's';
$stmt = $db_obj->prepare($sql);
if (!mysqli_stmt_bind_param($stmt, $types, $email)) {
echo "SQL Bind Parameter error.<br/>";
exit;
}
if (!mysqli_stmt_execute($stmt)) {
echo "SQL Statement Execute error.<br/>";
exit;
}
if (!isset($row[0]))
exit ("No such email registered.");