我没有使用计数,但我的日志告诉我“计数语法错误”

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 + '%'

【讨论】:

以上是关于我没有使用计数,但我的日志告诉我“计数语法错误”的主要内容,如果未能解决你的问题,请参考以下文章

计数错误但我在LINQ表达式中没有使用Count,

性能日志库 [关闭]

使用 Cocoa 和 Objective-C 理解引用计数

我没有将 freemarker 用于 struts2,但我看到 freemarker 生成了很多日志记录

可以从 iOS 设备获取多少小时的日志/控制台日志?

LogCat 不会显示我的日志