1

使用带有 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
4

0 回答 0