我正在使用预处理语句对我的数据库执行SELECT查询,但是SQL语法的本质导致MySQLi出现问题。如何在MySQL语句中使用SQL语句中的引用在PHP中准备语句?
当我尝试准备:
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.");
我不太确定为什么这是低票。我做了一些广泛的搜索,无法弄清楚。如果这是一个不好的问题,有人可以指出我的方向是正确的吗? – TheKarateKid 2013-03-06 05:12:43
我还没有做过投票。但在你的问题中的问题是你没有发布你的代码,只是把你的错误。 – 2013-03-06 05:14:36
我以为我提供了足够的信息,因为我提供的行是什么导致错误。我现在将提供完整的代码。 – TheKarateKid 2013-03-06 05:15:22