我有一个非常简单的搜索表单,它接受来自GET_的术语,然后将其合并到SQL查询中。我试图在一个参数化查询中使用来自GET的这个字符串,如下所示:
$searchString = '%' . $searchString . '%';
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = $searchString" . $max;
if ($getRecords = $con->prepare($recordsQuery)) {
$getRecords->bind_param("s", $searchString);
$getRecords->execute();
$getRecords->bind_result($username, $firstname, $lastname);
$rows = array();
while ($getRecords->fetch()) {
$row = array(
'username' => $username,
'firstname' => $firstname,
'lastname' => $lastname,
);
$rows[] = $row;
}
return $rows;
}
但是,这会导致错误
'where子句'中的未知列'term'。
我认为这是因为我的术语没有引用,但是为变量添加转义引号什么也没做。
任何语法错误等都是修改后提出这个问题的产物,并且在我的actaul代码中不存在。
好的,我通过更改以下行来修复此问题:
$searchstring = "'" . $searchstring . "'";
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = $searchString" . $max;
我确信这种方法可能很糟糕,因为它没有参数化......但是我无法以任何其他方式使用它。
答案 0 :(得分:1)
你忘记了一些引言:
$searchString = '"%' . $searchString . '%"';
但是,为什么要在使用绑定参数时构建请求:http://www.php.net/manual/fr/pdostatement.bindparam.php
$searchString = '%' . $searchString . '%';
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = :lastname" . $max;
if ($getRecords = $con->prepare($recordsQuery)) {
$getRecords->bind_param(":lastname", "%".$searchString."%");
$getRecords->execute();
$getRecords->bind_result($username, $firstname, $lastname);
$rows = array();
while ($getRecords->fetch()) {
$row = array(
'username' => $username,
'firstname' => $firstname,
'lastname' => $lastname,
);
$rows[] = $row;
}
return $rows;
}