Помогите правильно составить запрос

proxy-man

Новичок
Фанат
Добро... спасибо

-~{}~ 24.05.06 14:44:

Спасибо всем, кто откликнулся на мою "проблему"... :) Реализация запроса через форму PHP решена не полностью, но дело сдвинулось с мертвой точки - могу осуществлять sql-запрос на выборку из таблиц БД. Но есть одно НО... выбираю данные только из ячеек с числовым типом (serial,int*), а если ввожу в форму запроса текстовые данные - запрос возвращает мне следующее сообщение об ошибке:
----------------------------------------------------
Warning: pg_query(): Query failed: ERROR: invalid input syntax for integer: "" in /usr/local/www/forum/find_client.php on line 44
----------------------------------------------------
Проанализировав сообщение, понимаю, что тип вводимых данных для запроса, должен быть числовым !?! Либо у меня ошибка в синтаксисе самого запроса... на всякий случай выкладываю сам запрос, в котором находятся переменные PHP-формы:
----------------------------------------------------
$query="SELECT * FROM client where id='".$_POST['id_client']."'
or name='".$_POST['name_client']."'
or country='".$_POST['name_country']."'";
----------------------------------------------------
//$_POST['id_client'] - данная переменная изначально имеет тип //int и запрос по id-номеру строки обратывается корректно
//$_POST['name_client'] и $_POST['name_country'] - эти
//переменные должны принимать значения из ячеек, тип
//данных для которых определен, как - text
Следовательно напрашивается вопрос - как преобразовывать типы данных - число, текс, строка... Пролистал мануал и еще раз почитал тему "Переменные" из FAQ - пока озарение не пришло... Полагаюсь на вашу поддержку ребята...
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: proxy-man
Но есть одно НО... выбираю данные только из ячеек с числовым типом (serial,int*), а если ввожу в форму запроса текстовые данные - запрос возвращает мне следующее сообщение об ошибке:
----------------------------------------------------
Warning: pg_query(): Query failed: ERROR: invalid input syntax for integer: "" in /usr/local/www/forum/find_client.php on line 44
----------------------------------------------------
Проанализировав сообщение, понимаю, что тип вводимых данных для запроса, должен быть числовым !?!
Ага, должен. А пустая строка '' за число не прокатит.
 

proxy-man

Новичок
Автор оригинала: Sad Spirit
Ага, должен. А пустая строка '' за число не прокатит.
Как мне быть в данном случае? Как заставить запрост обрабатывать переменные, которые представляют собой строковый тип данных?
 

neko

tеam neko
непонимаю вопроса.
число это последовательность цифр 0-9.

соответственно, если есть запрос вида select ... from ... where id = x
где id это int
то x толжен быть int.
 

proxy-man

Новичок
Автор оригинала: neko
непонимаю вопроса.
число это последовательность цифр 0-9.

соответственно, если есть запрос вида select ... from ... where id = x
где id это int
то x толжен быть int.
Ребята, запрос работает если, в качестве аргумента передать поле с типом числовым типом данных (int,serial...), а как мне быть если необходимо сделать выборку из полей, тип данных которых является 'text' или 'char'? Если я выполняю запрос для выборки данных из ячеек с типом данных 'text' - то запрос мне возвращает ошибку следующего содержания:
============================================================
Запрос не выполнен.Ошибка: ERROR: invalid input syntax for integer: ""
============================================================
Я полагаюсь на ваше понимание и поддержку... Т.е. еще раз повторюсь - у меня не выходит сделать выборку из полей, где содержатся данные с типом "text" и я полагаю, что у меня есть ошибка в самом теле запроса. Еще раз выложу сам зарпрос, который содержит php-файл:
PHP:
$query="SELECT * FROM client where id='".$_POST['id_client']."'
        or name='".$_POST['name_client']."'
        or country='".$_POST['name_country']."'";
Переменные имеют следующий тип данных -
* $_POST['id_client'] - serial
* $_POST['name_client'] - text
* $_POST['name_country'] - text
На данном этапе я не могу реализовать выборку относительно переменных $_POST['name_country'] и $_POST['name_client'].
Я полагаю, теперь я ясно определил суть моей проблемы?
 

neko

tеam neko
не ты перепутал что-то.
вот это ошибка, которую тебе постгрес пишет, она не относится к name_*

она относится к id.

напечатай $_POST[id_client'] из скрипта.
 

proxy-man

Новичок
Автор оригинала: neko

напечатай $_POST[id_client'] из скрипта.
Виноват конечно, но понял последнего? Что необходимо напечатать и где? Еще раз приношу извинения за то, что "начинаю тупить"? :(
 

neko

tеam neko
ну я незнаю даже.

var_dump там или print_r, знаком с такими функциями?

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

таким образом сразу будет видно, что и где у тебя составленно неправильно.
 

proxy-man

Новичок
Автор оригинала: Фанат
ты уверен?
Что мне необходимо предпринять, чтобы быть до конца уверенным, что мой запрос выполняет то, чего я хочу? Как мне проверить, что указанные мною переменные, действительно несут в себе нужный для меня тип данных?
 

neko

tеam neko
сказали уже что.
надо напечтать переменные которые передаются в скрипт.
потом надо напечатать запрос.
 

proxy-man

Новичок
Автор оригинала: neko
сказали уже что.
надо напечтать переменные которые передаются в скрипт.
потом надо напечатать запрос.
Кое-что понял... уже занимаюсь "дебаггингом"... Но сразу могу сказать, что с типом переменных все нормально - т.е. даже echo выдает мне правильное содержание переменных на html-страницу.
 

neko

tеam neko
если ты сам собираешся дальше решать эту проблему, то я могу только порадоваться, что echo выдает правильное содержание.

если тебе нужна помощь, надо показать, что именно оно выдает.

кстати запостить
\d client
тоже не лишне.
 
Сверху