【问题标题】:SQLSTATE[42601]: Syntax error: 7 Inner Join errorSQLSTATE[42601]:语法错误:7 内部连接错误
【发布时间】:2018-08-13 16:30:21
【问题描述】:

我的 SQL/Zend 查询中有一行有问题,但我不明白这一点。

public function getByDemande($idDemande, $typeTiers) {

        $select = $this -> newSelect(true);
        $select -> from(array('d' => 'Demande'));
        $select -> join(array('s' => 'Suivi'), 'd."idDemande" = s."idDemande"');
        $select -> join(array('t' => $typeTiers),'d."idContact" = t."idTiers"');
        $select -> joinLeft(array('tet' => 'TelephoneTiers'), 't."idTiers" = tet."idTiers"');
        $select -> joinLeft(array('mt' => 'MailTiers'), 't."idTiers" = mt."idTiers"');
        $select -> join(array('at' => 'AdresseTiers'), 't."idTiers" = at."idTiers"');
        $select -> where('d."idDemande" = s."idDemande"', $idDemande);
        $select -> where('d.actif is true');
        $select -> order('s.dateHeure DESC');

        $resultat = $select->__toString();
        echo "$resultat\n";

        return $this->fetchAll($select);
    }

我启动了我的 SQL/Zend 查询,但这会引发错误 (SQLSTATE[42601]: Syntax error: 7 ERREUR: identifiant délimité de longueur nulle sur ou près de « "" »↵LINE 3: INNER JOIN "" AS "t" ON d."idContact" = t."idTiers")

在另一个文件上,我编写了代码以从此 SQL 查询中恢复数据。

$data = $this->_getPostData();
        $idDemande = $data['idDemande'];
        $idTypeTiers = $data['idTypeTiers'];
        $typeTiers = null;

        $gtwDemande = new LogisCom_Model_Gateway_Demande();
        $resultatDemande = $gtwDemande->getByDemande($idDemande, $typeTiers);
        $resultatDemande = $resultatDemande->toArray();

        switch ($idTypeTiers) {

            case TypeTiers::BENEFICIAIRE :
                $typeTiers = "Beneficiaire";
                break;
            case TypeTiers::SALARIE :
                $typeTiers = "Salarie";
                break;
            case TypeTiers::PROSPECT :
                $typeTiers = "Prospect";
                break;
            case TypeTiers::CANDIDAT :
                $typeTiers = "Candidat";
                break;
            case TypeTiers::ENTOURAGE :
                $typeTiers = "Entourage";
                break;
            case TypeTiers::FINANCEUR :
                $typeTiers = "Financeur";
                break;
            case TypeTiers::AUTRE :
                $typeTiers = "StructureExterne";
                break;
        }

感谢您的帮助。

【问题讨论】:

  • 似乎变量$typeTiers 未定义或为空字符串。请尝试在函数的开头放置一个var_dump($typeTiers),看看输出是什么。
  • 哦,对了,非常感谢您的帮助。 $typeTiers 是一个空字符串。
  • 现在可以用了吗?
  • 下次,请将您的错误翻译成英文。不是每个人都是法国人。另外,请注意 Zend 中的 Select 类实现了一个返回 SQL 查询的 __toString 方法。
  • 是的,我定义了 $typeTiers,现在可以使用了,非常感谢!

标签: php postgresql zend-db


【解决方案1】:

似乎变量$typeTiers 未定义或为空字符串。请尝试在方法的开头放置var_dump($typeTiers),以查看相关变量包含的内容。如果它是空的,请不要通过事先检查来使用空字符串调用您的方法。

在您的 switch/case 中,您没有 default 后备选项。因此,您的$idTypeTiers 的值可能不在您的cases 中,并且$typeTiers 一直为空。但是您对getByDemande 的调用甚至在此切换之前就已完成,因此即使使用回退,您的变量也将始终为空。

附录:

您可能需要将错误消息翻译成英文,因为不是每个人都会说法语(这也适用于其他语言)。这样,人们将更容易理解您的错误信息,而无需使用翻译等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2011-10-20
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多