mysqli_stmt :: bind_param()变量不匹配

时间:2013-12-23 14:07:34

标签: php mysqli

这个脚本出了什么问题,它给了我bind_param

的错误
if(isset($_GET['ID'])){

$page_id = $_GET['ID'];

      $page_id = mysqli_real_escape_string($con, $page_id);



$select_query = $con->prepare("select * from save_data where ID='$page_id'")
    or die(mysqli_error($con)); 

$select_query->bind_param('i', $page_id);

$select_query->execute();

$result = $select_query->get_result();

获取此错误

  

警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数与第23行的C:\ xampp \ htdocs \ mysql_login \ pictures.php中的绑定变量数不匹配

2 个答案:

答案 0 :(得分:5)

您没有在查询中使用占位符。您无意中将要替换它的变量改为:

$select_query = $con->prepare("select * from save_data where ID='$page_id'")

应该是:

$select_query = $con->prepare("select * from save_data where ID=?")

答案 1 :(得分:2)

你想要这而不是你拥有的那条线:

$select_query = $con->prepare("select * from save_data where ID=?");

在您发布的代码中,您根本不使用参数绑定 - 您将变量直接插入到SQL字符串中。对于参数绑定,您需要插入?占位符!

另外,请不要使用or die(mysqli_error($con)进行调试。那非常hacky。要么让它失败并出现异常(mysqli确实有这个选项,对吗?)或编写自定义包装器来正确处理错误,而不需要每次执行查询时重复相同的代码!