Запрос Postgres ‘where’ не работает с PHP

#php #sql #postgresql #where

#php #sql #postgresql #где

Вопрос:

Я запускаю некоторый PHP-код, в котором я пытаюсь найти строки с указанным параметром. Я успешно подключился к базе данных, однако столкнулся с одной проблемой.

Когда я запускаю этот код:

     $SQL = "SELECT * FROM schema.table";
    $result = pg_exec($dbconn, $SQL);
    while ($row = pg_fetch_array($result) {
          echo "data: " .$row . "<br/>n";
  

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

Однако мне нужно отфильтровать данные, в которых мне нужны только строки с определенным идентификатором. Когда я пытаюсь выполнить этот запрос:

     $SQL = "SELECT * FROM schema.table WHERE 'ID' = '123'";
  

pg_numrows($result) равно 0, когда есть четыре строки с идентификатором 123, и нечего показывать, и нет массива, и я понятия не имею, почему добавление оператора ‘where’ что-то меняет. Что случилось с данными, почему их фильтрация приводит к тому, что они больше не работают?


РЕШАЕМАЯ: выяснил ответ для всех, кто сталкивается с той же проблемой.

     $SQL = "SELECT * FROM schema.table WHERE "ID" = '123'";
  

Это синтаксис, который должен использоваться для столбцов, изменяющих символы. Спасибо всем, кто заставил меня понять, что я запускал забавный код с неправильными кавычками.

Комментарии:

1. Почему ваш идентификатор окружен символом «, разве он не должен быть 123, а не «123»?

2. Обратные знаки, одинарные кавычки и медведи, о боже!

3. Строка ‘ID’ никогда не равна строке ‘123’.

4. Если я не использую одинарные кавычки для идентификатора, я получаю эту ошибку: ошибка запроса: ОШИБКА: столбец «id» не существует. И когда я убираю одинарные кавычки из 123, я получаю: Ошибка запроса: ОШИБКА: недопустимый синтаксис ввода для целого числа

5. Вы могли бы просто написать: $SQL = "SELECT * FROM schema.table WHERE ID = '123'"; Нет необходимости заключать имя столбца в кавычки. как написал @user3763227 в своем последнем комментарии.

Ответ №1:

используйте так..

 $SQL = "SELECT * FROM schema.table WHERE ID = 123";
  

Никогда не используйте одинарные кавычки для имен столбцов и никогда не используйте одинарные кавычки для типа int..

Комментарии:

1. Вы должны объяснить, что не так с исходным синтаксисом, чтобы OP понял, в чем проблема.

2. Если я не использую одинарные кавычки для идентификатора, я получаю эту ошибку: ошибка запроса: ОШИБКА: столбец «id» не существует. И когда я убираю одинарные кавычки из 123, я получаю: Ошибка запроса: ОШИБКА: недопустимый синтаксис ввода для целого числа

3. пожалуйста, укажите структуру вашей таблицы, т.Е. Тип каждого столбца с его именем

4. @user3756998 тогда попробуйте это ..$SQL = «SELECT * FROM schema.table WHERE ID = ‘123’»; используйте одинарные кавычки только для 123 .. поскольку вы используете varchar для ID