bind_param()的Mysqli错误:类型定义字符串中的元素数与绑定变量的数量不匹配

时间:2015-07-02 14:03:33

标签: php mysqli prepared-statement

我尽力解决这个错误但没有成功。 我正在尝试使用预准备语句动态构建一个选择查询:

我有这段代码

<?php
$gm = $_GET['gm']; 
$ct = $_GET['ct']; 

$query = 'SELECT * FROM fchar';

$cond = array();
$params = array();
$type = array();

if (!empty($gm)) {
$cond[] = "gm = ?";
$params[] = $gm;
$type[] = "i";
}

if (!empty($ct)) {
$cond[] = "ct = ?";
$params[] = $ct;
$type[] = "s";
}

if (count($cond)) {
$query .= ' WHERE ' . implode(' AND ', $cond);
}

if (count($params)) {
$paramok = implode(', ', $params);

}
if (count($type)) {
$typeok = implode($type);
}

$stmt = $connection->prepare($query);
$stmt->bind_param(''.$typeok.'',$paramok);

$stmt->execute();


if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
while ($stmt->fetch()) {

}
}
?>

我有这个错误:

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

但是当我回应那些类型和参数时,我得到了这个:

echo "<br><br>Types : ".$typeok."<br>Param: ".$paramok."<br><br>Query:   ".$query."<br><br>";
// gives :
// Types : is
// Param: 1, USA
// Query: SELECT * FROM fchar WHERE gm = ? AND ct = ?

所以我有两种类型:是,和2个参数:1,美国。

我不明白为什么它说类型的数量与params的数量不匹配...任何线索? 谢谢!

1 个答案:

答案 0 :(得分:0)

$stmt->bind_param(''.$typeok.'',$paramok);

是否缺少您要在其上插入的变量类型?地方

$stmt->bind_param('ss', ''.$typeok.'', $paramok);

您可以在此处阅读使用数字,字符串等时应使用的字符:
http://php.net/manual/en/mysqli-stmt.bind-param.php

  

类型

     

包含一个或多个指定类型的字符的字符串   对于相应的绑定变量: