Проблема с кодом

Главные вкладки

Аватар пользователя Son Serg Son Serg 13 июля 2010 в 4:36

Son Serg

У кого-нить возникала проблема:
<?php
$db = pg_connect("host=localhost port=5432 dbname=MFCs user=**** password=****");
$result = pg_query($db,"SELECT * FROM doschoolweb");
?>

Соединение с БД устанавливается $db=Resource id #177.
а вот дальше пишет ошибку:

warning: pg_query() [function.pg-query]: Query failed: ERROR: relation "doschoolweb" does not exist LINE 1: SELECT * FROM doschoolweb

никак не могу ее решить...

Комментарии

Аватар пользователя vitg vitg 13 июля 2010 в 7:53

Насколько подсказывает логика, relation - реляционное отношение, т.е. таблица. Таблица с таким именем не существует в текущей базе данных.

Аватар пользователя Son Serg Son Serg 13 июля 2010 в 10:54

Спасибо, получилось. Таблица существовала, только PG регистрочувствительный... Там в таблице заглавные буквы были, пришлось переименовать и все заработало...
А никто не знает о чем говорит ошибка:

Wrong parameter count for pg_query()

при запросе:

$insert = pg_query($db,"INSERT INTO doschoolweb (code,surname) VALUES ('%s',%d,'%s', nextval('doschool1_seq_id'))", $form_state ['value']['r_surname']);
//r_surname - это имя текстового поля в форме.

Аватар пользователя kosilko kosilko 13 июля 2010 в 14:07

"Son Serg" wrote:
Wrong parameter count for pg_query()

"Son Serg" wrote:
pg_query($db,"INSERT INTO doschoolweb (code,surname) VALUES ('%s',%d,'%s', nextval('doschool1_seq_id'))", $form_state ['value']['r_surname']);

а вы с db_query не путаете случаем?

Аватар пользователя vitg vitg 13 июля 2010 в 15:21

"Son Serg" wrote:
Wrong parameter count for pg_query()

"Son Serg" wrote:
INTO doschoolweb (code,surname) VALUES ('%s',%d,'%s', nextval('doschool1_seq_id'))", $form_state ['value']['r_surname']

Дословный английски перевод: неправильное число параметров. В первом случае  (code,surname) - 2 параметра, второй случай -  VALUES ('%s',%d,'%s', nextval('doschool1_seq_id')) - 4 штуки, в третьем случае (для подстановки)  $form_state ['value']['r_surname'] - 1 штука (если только это не массив третьего уровня).

Должно быть 2==4==1. Это не так.

Выводы:
1) Учим SQL
2) Разве PostGre такая древняя СУБД, что она не поддерживает AUTO_INCREMENT? Меня терзают смутные сомненья, что  nextval('doschool1_seq_id') можно не писать.

Аватар пользователя Son Serg Son Serg 14 июля 2010 в 9:20

"kosilko" wrote:
а вы с db_query не путаете случаем?

Между db_query и pg_query разница в синтаксисе, как я понял небольшая. Так что можно использовать либо то, либо это.
"vitg" wrote:
Должно быть 2==4==1. Это не так.

Хорошо, я изменил запрос:
<?
$insert = pg_query($db,"INSERT INTO doschoolweb(surname) VALUES('%s')", $form['parent']['r_surname']);
?>
1==1==1 Вроде правильно.
Ошибка выходит та же самая. Неверное число параметров... SQL я только начинаю изучать, поэтому никак не могу понять как в строку запроса вставить данные из поля 'r_surname'...

Аватар пользователя kosilko kosilko 14 июля 2010 в 12:27

"Son Serg" wrote:
Между db_query и pg_query разница в синтаксисе, как я понял небольшая.

В мануале по этой функции в PHP ни слова не сказано про плейсхолдеры, которые вы тут вовсю использовали. Я что-то пропустил? И кстати, действительно - почему такое упорное наклание на API Drupal?

"мануал по пэхапе" wrote:

resource pg_query ([ resource $connection ], string $query )

Parameters

connection
PostgreSQL database connection resource. When connection is not present, the default connection is used. The default connection is the last connection made by pg_connect() or pg_pconnect().

query
The SQL statement or statements to be executed. When multiple statements are passed to the function, they are automatically executed as one transaction, unless there are explicit BEGIN/COMMIT commands included in the query string. However, using multiple transactions in one function call is not recommended.

Аватар пользователя kosilko kosilko 14 июля 2010 в 13:11

"vitg" wrote:
Дословный английски перевод: неправильное число параметров. В первом случае (code,surname) - 2 параметра, второй случай - VALUES ('%s',%d,'%s', nextval('doschool1_seq_id')) - 4 штуки, в третьем случае (для подстановки) $form_state ['value']['r_surname'] - 1 штука (если только это не массив третьего уровня).

Вообще имелось в виду - неправильное число параметров для PHP-функции. И где вы тут углядели три случая? На входе имеем один несчастный случай, и три параметра для функции, впихнутые в нее умелою рукою.
1й - $db (переменная)
2й - "INSERT INTO doschoolweb (code,surname) VALUES ('%s',%d,'%s', nextval('doschool1_seq_id'))" (строка)
3й - $form_state ['value']['r_surname'] (переменная)

фун_кци_я(параметр1, параметр2, параметр3);
Выдержку из мануала по pq_query я уже приводил, там-же и ясно написано, сколько и каких параметров данная функция принимает в себя.
Какие еще могут быть интерпретации и разночтения? Ну если только вольные. Выводы: учим похапе -)