我有一些代码生成一个名为$ query的MySQL查询字符串:

$query = "select * from Surveys where surveylayoutid='$surveyid' and customerid='" . $_SESSION['login_customerid'] . "' and (";
$clue = $_POST['postcode'];
$onwhat="Postcode";
$query .= $onwhat . " like '%$clue%') order by id desc";
$result = mysql_query($query, $connection) or die(mysql_error());


这将返回类似:

从Surveys中选择*,其中Surveylayoutid = '12'和customerid ='1',以及(邮政编码,例如'%dn%')按ID desc排序

效果很好。然后,我更改了代码,因为我想搜索更多字段,因此现在显示为:

$remap = array("Postcode", "Street", "HouseNum", "District", "Town");
$query = "select * from Surveys where surveylayoutid='$surveyid' and customerid='" . $_SESSION['login_customerid'] . "' and (";
for ($i=0; $i<=4; $i++) {
 if ($_POST[strtolower($remap[$i])]!="") {
  $clue = $_POST[strtolower($remap[$i])];
  $query .= $remap[$i] . " like '%$clue%') order by id desc";
  break;
 }
}


这也返回:

从Surveys中选择*,其中Surveylayoutid = '12'和customerid ='1',以及(邮政编码,例如'%dn%')按ID desc排序

表面上是相同的,但是会产生此错误:

您的SQL语法有误。检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行附近使用'like'%dn%'by id desc'排序

在这两种情况下,$ query都包含相同的“文本”,但是由于某些原因,在更新的代码中未将其视为有效的MySQL查询,有人可以告诉我为什么吗?

最佳答案

一个可能的问题可能是此处内容的解释。
如果您使用:

  $query .= $remap[$i] . " like '%$clue%') order by id desc";


“”中的所有内容都需要解释。因此,可能会有您乍看之下看不到的不良副作用,并且可以解释发生了什么。为了避免这种情况,必须将其更改为:

$query .= $remap[$i] . ' like ' . "'" . '%' . $clue . '%' . "') order by id desc";


即使在大小上比较笨拙,也可以确保不会解释$ lue和%,因为不会解释''之间的所有内容。

关于php - PHP构建的字符串中的MySQL语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33254593/

10-12 02:17