php не выполняет хорошо сформированное предложение postqtgresql

63
6

У меня есть этот код:

$dbconn = pg_connect("host=localhost dbname=dbbase user=postgres password=postgres") or die('Connection error: ' . pg_last_error());
$qstation ="SELECT id FROM st WHERE string ='".$string."'";
$rstation = pg_query($dbconn,$qstation) or die('Query error: ' . pg_last_error());

echo $qstation;

это показывает мне

SELECT id FROM st WHERE string='A_AA_00_00_A'

если я выполняю его на pgadmin3, он возвращает мне результат.

но если я попытаюсь сделать

print_r(pg_fetch_array($rstation, null, PGSQL_ASSOC));

у меня нет erros, а print_r() ничего мне не возвращает.

если я изменяю переменную $ string с 'A_AA_00_00_A'

$qstation ="SELECT id FROM st WHERE string='A_AA_00_00_A'";

предложение выполняет права, а print_r() возвращает данные

Array ( [id] => 10 )

Что я делаю не так?

спросил(а) 2021-01-25T16:23:00+03:00 5 месяцев назад
1
Решение
63

Вы действительно должны использовать параметризованные утверждения здесь, хотя я не вижу причин думать, что проблема в этом конкретном случае. Используйте PDO или pg_query_params. См. Http://bobby-tables.com, google "SQL injection", руководство по SQL по SQL-инъекции.

В подобном случае вам действительно нужно посмотреть журналы ошибок сервера PostgreSQL, чтобы определить, достигает ли запрос PostgreSQL вообще, и если да, то ли он с ошибкой.

Вы также обнаруживаете, что не можете правильно проверить наличие ошибок в вашем PHP-коде. Используйте pg_result_status чтобы проверить наличие ошибки, и pg_result_status чтобы получить ошибки.

$rstation = pg_query($dbconn,$qstation) or die('Query error: ' . pg_last_error());
if (pg_result_status($rstation) != PGSQL_TUPLES_OK) {
$errmsg = pg_result_error($rstation);
# ... report error to user or handle it ...
}

Вы также можете посмотреть на pg_result_error_field для определенных полей ошибки.

ответил(а) 2021-01-25T16:23:00+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема