php - PDO 意外抛出具有多个绑定(bind)参数的绑定(bind)变量错误

标签 php mysql pdo

我有一个 PDO 准备语句,其中绑定(bind)变量是在我们网站的高级搜索功能中动态准备的(它们可能因调用而异)。

我知道实际的 SQL 调用是正确的,但由于某种原因,我在尝试将我的字符串变量传递到准备好的语句时遇到以下错误:

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

我以前遇到过这个错误,对正常的解决步骤非常熟悉。但是,我的情况很奇怪。使用以下示例代码:

$columns = "FirstName, LastName, ID, City, State";
$sWhere = "WHERE (FirstName LIKE ? AND LastName
    LIKE ? AND ID LIKE ? AND City
    LIKE ? AND State LIKE ?)";
$sVal = "'tom', 'lastname', '12345', 'Diego', 'CA'";

$sql = "SELECT ".$columns." FROM table ".$sWhere;
$stmt = $db->prepare($sql);

$stmt->execute(array($sVal));

其中 $sVal 的范围可以从“名字”、“姓氏”……到超过 12 个变量。改变变量的数量具有相同的结果。完整的声明是:

SELECT FirstName, LastName, ID, City, State 
  FROM table
  WHERE (FirstName LIKE ? AND LastName
    LIKE ? AND ID LIKE ? AND City
    LIKE ? AND State LIKE ?)

当我按原样运行查询时,返回了上述错误。当我认为我确实有不正确数量的变量时,我在我的 $value 语句上运行了一个 ECHO,发现它们确实匹配。

作为二次测试,我从 $value 的回显中获取输出并直接插入回执行数组:

$stmt->execute(array('tom', 'lastname', '12345', 'Diego', 'CA'));

这对任何问题都有效。

它不会影响我的问题,但我还在 $sVal 变量中放置了 % 符号以确保正确性:

$sVal="'%tom%', '%lastname%', '%12345%', '%Diego%', '%CA%'";

对我来说,从零开始,SAME 变量的回显输出会起作用,但变量本身不会起作用。有什么想法吗?

最佳答案

你的 $sVal 不是一个数组,它只是一个简单的字符串,所以当你写 array($sVal) 时,execute() 只能看到一个值。 你需要 explode()你的 $sVal 字符串变成一个数组:

// clean up the unnecessary single quotes and spaces
$value = str_replace(array("'", ", "), array("", ","), $value);
// make the array of the values
$value = explode(',', $value);
$stmt->execute($value);

关于php - PDO 意外抛出具有多个绑定(bind)参数的绑定(bind)变量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4380976/

相关文章:

php - 将字符串格式的 CSV 值内部连接到 PHP 中的 MySQL 表

php - 将图片/视频发布到 Twitter

php - 迁移 Codeigniter 3 中的 "up"方法无效

php - 在 Codeigniter 中选择并加入同一个表

php - 分页 - 如何不允许用户进一步浏览现有页面?

php - 使用自己的 API 时防止无限 AJAX 循环

php - 使用mysqli_real_connect连接远程MySQL数据库后查询

php - MySQLi 持久连接填充并发用户

PHP PDO Fetch_Assoc 未正确返回

php - 使用Select Option的值查询数据库