postgresql select запрос с переменными

0

Я пытаюсь сделать postgresql select query work с php, но не могу пройти синтаксис.

У меня есть переменная и запрос, который возвращает фамилию любого совпадения.

$name = 'Smith';
$query = 'SELECT surname FROM emploee WHERE name= '.$name.';';
$a = pg_query(connect(),$query );
while($row = pg_fetch_array($a)){ echo "Match";    }

Для тех, кто задается вопросом, почему я должен объявлять Смиту как переменную, $ name не всегда = Смит. Значение $ name берется правильно из другого запроса. Однако это не работает. Я прочитал в статье, что я должен использовать pg_query_params(), но не смог заставить это работать.

Ваша помощь будет высоко оценена

  • 0
    Вы уверены, что у вас есть подключение к базе данных? А для pg_queruy_params () вам понадобится заполнитель SQL, например, $ 1 в вашем SQL-выражении.
  • 0
    Я уверен, что я делаю. Я установил это ранее, но не включил это в почту. Кроме того, значение, которое я получаю для $ name, берется в другом запросе, который использует это соединение, поэтому оно работает. Что касается pg_query_params (), я прочитал руководство по php и увидел пример, но не смог адаптировать его к моему случаю. Проблема заключается в включении переменной в запрос (проблемы с кавычками). Я просто не знаю, как сделать это правильно.
Показать ещё 2 комментария
Теги:

3 ответа

0
Лучший ответ

Это два метода, которые работали, предложенные Бангом и Фрэнком Хейкенсом соответственно. Поскольку они только прокомментировали, я отправляю его как ответ для тех, кто может прийти в ту же ситуацию. Однако я бы настоятельно рекомендовал им также прочитать комментарии. Я узнал пару вещей на пути, вы могли бы также.

Bang suggestions->

$a = trim($name); 
$query = "SELECT surname FROM employee WHERE name= '" . $a . "';"; 
$result = pg_query(connect(), $query); 
while($row = pg_fetch_array($result)){ echo "Match"; }

Предложения Фрэнка Хейкенса ->

$n = trim($name);
$s = trim($surname);
$params = array ($n, $s);
$result = pg_query_params(connect(), 'SELECT office FROM emploee WHERE name = $1 and surname = $2', $params);
while($row = pg_fetch_array($result)){ $k = $row['path']." ".$row['office'];  echo $k; }

В обоих случаях я должен использовать trim (не уверен, что это будет ваш случай тоже). Я добавил третий полевой офис, чтобы продемонстрировать, как я могу принять несколько аргументов. Если у кого-то есть другие критики, предложения или решения, будь моим гостем. Я попробую всех и дам вам знать.

1

Попробуй это:

$query = "SELECT surname FROM emploee WHERE name= '" . $name . "';";

И лучший способ без привязки:

$query = sprintf("SELECT surname FROM emploee WHERE name = '%s'", pg_escape_string($name));

И если вы хотите использовать привязку:

$result = pg_query_params(connect(), 'SELECT surname FROM emploee WHERE name = $1', array($name));

Когда вы получаете результат из другого запроса "Смит", есть пробел.

Чтобы удалить пробел из $name, вы можете: $name = trim($name);

  • 0
    Это ошибка, которую я получаю с первой попытки: Предупреждение: pg_query (): Запрос не выполнен: ОШИБКА: столбец «Смит» не существует ЛИНИЯ 1: ВЫБИРАЙТЕ фамилию ОТ emploee WHERE name = "John"; ^ in // file_path Со вторым оператором я получаю эту ошибку: pg_fetch_array () ожидает, что параметр 1 будет ресурсом, ноль задан в
  • 0
    Я изменил «на», ваш запрос должен выглядеть как SELECT фамилия ОТ emploee WHERE name = 'John';
Показать ещё 11 комментариев
0

С помощью этого выше кода вы можете распечатать "соответствие" для каждой записи, соответствующей запросу

$a = trim($name); 
$query = "SELECT surname FROM employee WHERE name= '" . $a . "';"; 
$result = pg_query(connect(), $query); 
while($row = pg_fetch_array($result)){ echo "Match"; }

Но, конечно, вам нужно напечатать возвращаемые значения: просто сделайте это echo $row['columnName']

Полная информация здесь: https://w3resource.com/PostgreSQL/select.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню