使用带有 PDO 的 PHP 访问 MyISAM 表...
这种情况失败:
SELECT
id,
title,
content,
(MATCH(title) AGAINST(:fulltext IN BOOLEAN MODE)*10)+(MATCH(content) AGAINST(:fulltext IN BOOLEAN MODE)*3) AS relevancy
FROM
mytable
WHERE
enabled = 1
AND `date` >= CURRENT_DATE
AND MATCH (title, content) AGAINST (:fulltext IN BOOLEAN MODE)
ORDER BY relevancy DESC, `date` ASC
LIMIT 50
$stmt->bindParam(":fulltext", $fulltext);
$stmt->execute();
错误:
exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number'
现在我将代码改写成这样:
SELECT
id,
title,
content,
(MATCH(title) AGAINST(? IN BOOLEAN MODE)*10)+(MATCH(content) AGAINST(? IN BOOLEAN MODE)*3) AS relevancy
FROM
mytable
WHERE
enabled = 1
AND `date` >= CURRENT_DATE
AND MATCH (title, content) AGAINST (? IN BOOLEAN MODE)
ORDER BY relevancy DESC, `date` ASC
LIMIT 50
$stmt->execute(Array($fulltext, $fulltext, $fulltext));
这有效。
问题:谁能解释这是为什么?为什么绑定 :fulltext 在第一种情况下会失败?
多次使用相同的绑定在访问 Postgres DB 而不是 MariaDB MyISAM 表的其他类似语句中有效:
WHERE customer.first_name ILIKE :term
OR customer.city ILIKE :term
OR customer.street ILIKE :term
OR customer.zip ILIKE :term
OR customer.email ILIKE :term
OR customer.email_private ILIKE :term
OR customer.company_email ILIKE :term