【问题标题】:DRUPAL PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokensDRUPAL PDOException: SQLSTATE[HY093]: 无效的参数号:绑定变量的数量与标记的数量不匹配
【发布时间】:2015-12-08 13:07:57
【问题描述】:

我不知道我在这里做错了什么?有人可以帮帮我吗?在 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%%')")

非常感谢任何帮助..

【问题讨论】:

    标签: mysql pdo drupal-7


    【解决方案1】:

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

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

    【讨论】:

    • 嗨,尝试使用单个 %,没有运气.. 仍然得到相同的错误 :(
    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    相关资源
    最近更新 更多