我收到消息“
警告: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"!
答案 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)
你有两个错误的因素:
$whereVtest1 = "$lc_postcode, $proptype";
是string
,因为它封装在引号中。变量(2)被打印到字符串中。所以实际上这个变量只是一个变量,它是 NOT 两个或多个连接的(它看起来像你在哪里尝试)。 你无法连接这样的变量,如果需要,可以使用数组。
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);