Функция pg_query() "говорит": ошибка синтаксиса, а pg_result_error() выводит пустую строку, а чем может быть проблема?

Пытаюсь загрузить данные в таблицу Postgres. Скрипт и данные находятся на локальном сервере Open Server, а бд на другом, удаленном серваке, к которому есть полный доступ (соединяюсь с базой через менеджер бд и все редактирую). Подключение к базе при запуске скрипта успешно происходит, но вот запрос INSERT INTO не срабатывает:

$pg = "INSERT INTO public.1253_data () VALUES " . implode(",", $temp_array);

Ошибка выдается от функции pg_query, пишет: Warning: pg_query(): Query failed: Ошибка синтаксиса (примерное положение: .1253_data).

Я запускаю функцию pg_result_query():

$result = pg_query($conn, $sql);


 if ($result) {
   echo "New record created successfully";
} else {
      $k = pg_get_result($result);
      echo 'Query failed1: ' . pg_result_error($k);
}
pg_close($conn);

В результате pg_result_error дает пустоту:

введите сюда описание изображения

Судя по документации, pg_result_дает такое только тогда, когда ошибок никаких нет. Но тогда почему собственный дескриптор ошибки pg_query такой?

Только начинаю pg изучать, все перепробовал в поисках ошибки ( Эксперты, подскажите, в чем она может быть?


Ответы (2 шт):

Автор решения: Roman Konoval

Неправильный синтаксис для INSERT используете. Скобки должны стоять вокруг значений:

insert into sometable values ('val1, 'val2');

Должно быть так:

$pg = "INSERT INTO public.1253_data VALUES " . implode(",", $temp_array);

и убедитесь, что у вас значения в temp_array соответствуют колонкам в таблице. Еще лучше колонки явно перечислить:

$pg = "INSERT INTO public.1253_data (column1, column2, column3, и т.д.) VALUES " . implode(",", $temp_array);
→ Ссылка
Автор решения: Мелкий

В результате pg_result_error дает пустоту

Как прямо указано в документации что pg_query

If an error occurs, and false is returned, details of the error can be retrieved using the pg_last_error() function if the connection is valid.

Так и в описании pg_result_error явно оговорено

Because pg_query() returns false if the query fails, you must use pg_send_query() and pg_get_result() to get the result handle.


Ошибка синтаксиса (примерное положение: .1253_data)

Поясните, чем именно вас не устраивает полученный текст ошибки. Вполне однозначное сообщение об ошибке, даже указывающее на проблемное место. Совершенно резонно указывающее на ошибку синтаксиса. Ведь по синтаксису SQL идентификатор не может начинаться с цифры:

SQL identifiers and key words must begin with a letter (a-z, but also letters with diacritical marks and non-Latin letters) or an underscore (_). Subsequent characters in an identifier or key word can be letters, underscores, digits (0-9), or dollar signs ($).

Если по какой-то мутной причине вы хотите именовать таблицу именно так - вы обязаны к ней обращаться, используя quoted identifier синтаксис. То есть,

INSERT INTO public."1253_data"

Но лучше лишний раз подумайте, зачем. Меня такой вид именования таблицы подводит к мысли, что 1253 - это какой-то внешний идентификатор из другой таблицы (id пользователя или что-то подобное) - то есть явная ошибка проектирования схемы базы данных.

→ Ссылка