mysql - DRUPAL PDO异常 : SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

标签 mysql pdo drupal-7

我不知道我在这里做错了什么?有人可以帮帮我吗?在 Drupal7 自定义模块中执行以下查询时,出现以下错误:

错误:

ResponseText: PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens: 
SELECT t.tid AS tid, t.name AS name
FROM 
{taxonomy_term_data} t
WHERE  (t.vid = :vid) AND (LOWER(t.name) LIKE LOWER('%%:last_string%%')) 
LIMIT 50 OFFSET 0; 
Array
(
  [:vid] => 6
  [:last_string] => server
)

代码:

$result = db_select('taxonomy_term_data', 't')
            ->fields('t', array('tid', 'name'))
            ->where('t.vid = :vid', array(':vid'=>$vid))
            ->where("LOWER(t.name) LIKE LOWER('%%:last_string%%')", array(':last_string'=>$last_string))
            ->range(0, $num_results)
            ->execute();

如果我直接对 :last_string 的值进行硬编码,则查询有效,

例子: ->where("LOWER(t.name) LIKE LOWER('%%server%%')")

非常感谢任何帮助..

最佳答案

尝试只使用一个 %,因为:% 可以替代零个或多个字符。您不需要其中的 2 个。

LOWER 函数接受一个字符串作为参数,'%:last_string%' 被当作字符串而不是数组的绑定(bind)(':last_string'=>$last_string),这就是当你删除绑定(bind)时它起作用的原因。所以尽量不要将 :last_string 放在 LOWER 函数中,因为它不会将其识别为绑定(bind)。

关于mysql - DRUPAL PDO异常 : SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34156726/

相关文章:

php - 从 MySQL 表逐行填充自定义 XML 结构

mysql - 如何使结果集中的每一行返回多次?

php - PDO 执行($params)与 bindParam

php - 以编程方式,我想要一个没有 "body"字段的 Drupal 7 内容类型

drupal - 在 Drupal 节点上运行 SPARQL 查询

java - Apache Solr : bitwise operations to filter search results

MySQL Procedure 多个结果

mysql - 当在MySQL Workbench中工作时,Jpa Criteria等于表的String属性的谓词(带有newLine字符'\n')不起作用

php - 在 PDO 中构建插入查询时出现解析错误

PHP pdo : prepare() vs transactions