引号和参数化SQL查询的问题

时间:2009-10-22 14:21:45

标签: php sql mysql

我有一个非常简单的搜索表单,它接受来自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;

我确信这种方法可能很糟糕,因为它没有参数化......但是我无法以任何其他方式使用它。

1 个答案:

答案 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;
    }