Проблема с кавычками и параметризованным SQL-запросом - PullRequest
0 голосов
/ 22 октября 2009

У меня есть очень простая форма поиска, которая берет термин из 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;
    }

Однако это приводит к ошибке

Неизвестный столбец 'term' в 'where clause'.

Я предполагаю, что это потому, что мой термин не заключен в кавычки, однако добавление экранированных кавычек к переменной ничего не сделало.

Любые синтаксические ошибки или тому подобное являются продуктом модификации, чтобы задать этот вопрос, и не существуют в моем коде actaul.


ОК, я исправил это, изменив следующие строки:

 $searchstring = "'" . $searchstring . "'";
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = $searchString" . $max;

Я уверен, что этот подход, вероятно, плох, потому что он не параметризирован ..., но я не смог заставить его работать каким-либо другим способом.

1 Ответ

1 голос
/ 22 октября 2009

Вы забыли некоторые цитаты: $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;
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...