【发布时间】:2016-10-13 16:08:15
【问题描述】:
对于以下 SQL,我收到“基数违规”错误:
Doctrine\DBAL\Exception\DriverException: 执行时发生异常
SELECT p.* FROM mod_products_products p
LEFT JOIN mod_products_products_categories c_link ON c_link.product_id = p.id
LEFT JOIN mod_products_brands b ON p.brand_id = b.id
LEFT JOIN mod_products_groups vg ON p.variation_id = vg.id
LEFT JOIN mod_products_categories c ON c_link.category_id = c.id
LEFT JOIN mod_products_group_options vg_o ON vg_o.group_id = vg.id
LEFT JOIN mod_products_group_values vg_o_v ON vg_o_v.option_id = vg_o.id
WHERE (p.name LIKE (?, ?)) AND (p.parent_id = 0) AND (vg_o.disabled=0)
GROUP BY p.id ORDER BY p.name ASC
LIMIT 18446744073709551615 OFFSET 0
带参数 ["%big%", "%light%"]: SQLSTATE[21000]: 基数违规:1241 操作数应包含 1 列。
只有在WHERE (p.name LIKE (?, ?)) 的参数列表中定义了多个值时才会发生错误。
我正在使用executeQuery(),并将数组作为Connection::PARAM_STR_ARRAY 传递。在原始声明中,我将问题点定义为:
$builder->andWhere('p.name LIKE (:partial_names)');
它似乎不喜欢将数组作为部分名称传递。关于造成这种情况以及如何避免这种情况的任何想法?
【问题讨论】:
-
是什么让你认为 mysql LIKE 可以接受多个参数?
-
@YourCommonSense 由于
foo LIKE ('bar')在 MySQL 中有效,我认为很自然地认为foo LIKE ('bar', 'baz')也有效。
标签: php mysql sql doctrine-orm dbal