警告:mysqli_stmt_bind_param:类型定义字符串中的元素数与绑定变量数不匹配

时间:2016-09-21 19:41:57

标签: php mysqli

我收到消息“

  

警告:mysqli_stmt_bind_param:类型定义字符串中的元素数与...中的绑定变量数不匹配。

在简单的php select语句中

$wherePtest1 = "postcode= ? AND  proptype = ? AND ";
$whereVtest1 = "$lc_postcode, $proptype";

$where_no_andP = rtrim($wherePtest1, 'AND ');
var_dump($where_no_andP);
var_dump($whereVtest1); 

/* 1. create a prepared statement */
if ($stmt1 = mysqli_prepare($link, "SELECT $what_select4TS FROM $table WHERE $where_no_andP ORDER BY rent $reihenach LIMIT $offset, $rowsPerPage")) 
{
/* 2. bind parameters for markers */
mysqli_stmt_bind_param($stmt1, "ss", $whereVtest1);

/* 3. execute query */
etc

即使var_dump()正确显示

,我也会收到此警告
string(29) "postcode= ? AND proptype = ?" 
string(9) "da8, Flat"!

4 个答案:

答案 0 :(得分:2)

因为:

mysqli_stmt_bind_param($stmt1, "ss", $whereVtest1);
                                           ^^

MySQLi将$whereVtest1中获取您的CSV数据并将其拆分。您必须为每个占位符明确提供 SINGLE 值:

mysqli_stmt_bind_param($stmt1, 'ss....s', $val1, $val2, .... $valN);
                                ^----------^
                                 ^------------------^
                                      ^------------------------^

答案 1 :(得分:1)

你有两个错误的因素:

  1. 您的$whereVtest1 = "$lc_postcode, $proptype";string,因为它封装在引号中。变量(2)被打印到字符串中。所以实际上这个变量只是一个变量,它是 NOT 两个或多个连接的(它看起来像你在哪里尝试)。
  2. 你无法连接这样的变量,如果需要,可以使用数组。

    1. mysqli_stmt_bind_param($stmt1, "ss", $whereVtest1);这告诉SQL期望 TWO 字符串值(ss),但由于(1)

      修复:

      mysqli_stmt_bind_param($stmt1, "ss", $lc_postcode, $proptype);
      

      这一行现在可以正常工作并正确地结合PHP和SQL。

      修改:正如scaisEdge所述,您还需要确保正确关闭评论部分。

答案 2 :(得分:0)

你错过了代码中的密切评论。尝试添加* /

/* 1. create a prepared statement  */
                                   ^^  here
if ($stmt1 = mysqli_prepare($link, "SELECT $what_select4TS FROM $table WHERE $where_no_andP ORDER BY rent $reihenach LIMIT $offset, $rowsPerPage")) 

答案 3 :(得分:0)

您只绑定一个参数,您还必须绑定第二个变量 - 例如:

mysqli_stmt_bind_param($stmt1, "ss", $whereVtest1, wherePtest1);