我没有使用计数,但我的日志告诉我“计数语法错误”
Posted
技术标签:
【中文标题】我没有使用计数,但我的日志告诉我“计数语法错误”【英文标题】:I'm not using count but my log told me "count syntax error" 【发布时间】:2020-04-02 07:46:52 【问题描述】:我有一个在 php 中看起来像这样的请求:
SELECT
CONTACT.NOM,
CONTACT.PRENOM,
CONTACT.TITRE,
CONTACT.COMMENT2,
CONTACT.TEL,
CONTACT.FAX,
CONTACT.EMAIL,
SERVICES.NOM AS SERV
FROM
CONTACT, SERVICES
WHERE
CONTACT.SECLEUNIK = SERVICES.SECLEUNIK AND
CONTACT.CLCLEUNIK = :idClient AND
(
CONTACT.NOM LIKE %:nom% COLLATE FRENCH_CI_AI OR
CONTACT.PRENOM LIKE %:prenom% COLLATE FRENCH_CI_AI
)
$prepare->execute(array(
':idClient' => $idClient,
':nom' => $nomClient
));
我的日志给了我这个错误:
/var/www/WebService/src/Controller/DefaultController.php 第 893 行的“COUNT 字段不正确或语法错误”
第893行是:':nom' => $nomClient
,我不明白为什么错误中有一个“计数”,不知道如何解决。
【问题讨论】:
它没有回答问题,但您已经有 28 年的时间开始使用 ANSI-92 JOIN 语法;很久以前你就开始了。 Bad habits to kick : using old-style JOINs 语句需要绑定3个参数——:idClient
、:nom
和:prenom
。
LIKE '%' + :prenom + '%'
..
@Zhorov "Syntaxe wronge vers '@P2'",现在我有这个错误,我不明白,因为这个请求是一个月前创建的并且可以工作,但是从今天开始它不再工作了
@jarlh 好的,你解决了,谢谢发布答案
【参考方案1】:
我认为您的错误的实际原因是您的语句中有三个参数(:idClient
、:nom
和 :prenom
),但您在 execute()
方法中传递了两个参数。
另外,您需要正确使用LIKE
运算符并使用适当的JOIN
语法更改语句:
声明(基于问题中的代码):
SELECT
CONTACT.NOM,
CONTACT.PRENOM,
CONTACT.TITRE,
CONTACT.COMMENT2,
CONTACT.TEL,
CONTACT.FAX,
CONTACT.EMAIL,
SERVICES.NOM AS SERV
FROM CONTACT
INNER JOIN SERVICES ON SERVICES.SECLEUNIK = CONTACT.SECLEUNIK
WHERE
CONTACT.CLCLEUNIK = :idClient AND
(
CONTACT.NOM LIKE CONCAT('%', :nom, '%') COLLATE FRENCH_CI_AI OR
CONTACT.PRENOM LIKE CONCAT('%', :prenom, '%') COLLATE FRENCH_CI_AI
)
PHP:
<?php
...
$prepare->execute(
array(
':idClient' => $idClient,
':nom' => $nomClient,
':prenom' => $prenomClient
)
);
...
?>
【讨论】:
【参考方案2】:您必须将类似的通配符连接到参数,例如:
LIKE '%' + :prenom + '%'
【讨论】:
以上是关于我没有使用计数,但我的日志告诉我“计数语法错误”的主要内容,如果未能解决你的问题,请参考以下文章