如何在mysql php prepare语句中解决引用问题

时间:2017-05-10 15:56:58

标签: php mysql

我在PHP脚本中有一个mysql prepare语句:

$stmt = $ln_sph->prepare("SELECT (CASE WHEN n.Id IS NULL THEN e.ExclusionEn ELSE concat(e.ExclusionEn, ' (', n.TitleEn, ' (', n.Naics, '))') END) AS Exclusion 
                FROM tblExclusion e 
                LEFT JOIN tblNaics n ON (e.ExclusionClassNaicsId = n.Id) 
                WHERE NaicsId = :Id");
$stmt->bindValue(':match', $search_query, PDO::PARAM_STR);
$stmt->execute();
$docs = $stmt->fetchAll();

我想在prepare语句中修改查询来处理这个查询......

SELECT (CASE WHEN n.Id IS NULL THEN e.ExclusionEn ELSE concat(e.ExclusionEn, ' (','(<a href="javascript:__displayDetails(' ,e.ExclusionClassNaicsId,',1);">',n.TitleEn, ' (', n.Naics, ')</a>)') END) AS Exclusion 
                    FROM tblExclusion e 
                    LEFT JOIN tblNaics n ON (e.ExclusionClassNaicsId = n.Id) 
                    WHERE NaicsId = :Id

我可以直接在mysql中运行这个查询,但由于引号,我不知道如何在prepare语句中获取它。我认为bindValue可能有用,但没有任何运气。任何有关正确方向的帮助或观点都将受到赞赏。

1 个答案:

答案 0 :(得分:-3)

首先将SQL分解为单独的变量。使代码更清晰,更容易调试:

$sql = 'SELECT (CASE WHEN n.`Id` IS NULL THEN e.`ExclusionEn` ELSE concat(e.`ExclusionEn`, \' (\',\'(<a href="javascript:__displayDetails(\' ,e.`ExclusionClassNaicsId`,\',1);">\',n.`TitleEn`, \' (\', n.`Naics`, \')</a>)\') END) AS Exclusion 
        FROM `tblExclusion` AS e 
        LEFT JOIN `tblNaics` AS n ON (e.`ExclusionClassNaicsId` = n.`Id`) 
        WHERE `NaicsId` = :Id';

然后你可以通过var_dump查看它是如何出现的,看看它出错了。

其他说明:您可以将\'替换为" - 但我是单引号粉丝:)

之后,将其放入准备声明中: $stmt = $ln_sph->prepare($sql);