我在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可能有用,但没有任何运气。任何有关正确方向的帮助或观点都将受到赞赏。
答案 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);