DRUPAL PDOException:SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配

时间:2015-12-08 13:07:57

标签: mysql pdo drupal-7

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

ERROR:

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
)

CODE:

$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 %%')”)

任何帮助都非常感谢..

1 个答案:

答案 0 :(得分:1)

尝试仅使用一个%,因为:%可替换零个或多个字符。你不需要2个。

LOWER函数将字符串作为参数和'%:last_string%'被视为字符串而不是作为对数组的绑定(':last_string' => $ last_string),这就是删除绑定时它的工作原理。所以尽量不要将:last_string放在LOWER函数中,因为它不会将它识别为绑定。