Доброго времени суток.
У меня появилась проблема с БД Postgre. Возникла необходимость сделать web интерфейс для базы данных. Его я выполнил ввиде связки Apache + PHP + PostgreSQL на winXP.
Сервер проверил - все работает. Попытался вывести данные с таблицы путем применения кода:
<?php
// database access parameters
// alter this as per your configuration
$host = "192.168.*.*";
$user = "user_ro";
$pass = "123456";
$db = "S_RO";
// open a connection to the database server
$connection = pg_pconnect ("host=$host dbname=$db user=$user password=$pass");
if (!$connection)
{
die("Could not open connection to database server");
}
// generate and execute a query
$query = SELECT * FROM Base_man;
$result = pg_query($connection, $query) or die("Error in query: $query.
" . pg_last_error($connection));
// get the number of rows in the resultset
$rows = pg_num_rows($result);
echo "There are currently $rows records in the database.";
// close database connection
pg_close($connection);
?>
При попытке реализовать этот код - возникает ошибка
Error in query: SELECT * FROM base_man. ERROR: relation "base_man" does not exist LINE 1: SELECT * FROM base_man ^
Помогите пожалуйста разобраться. Мне необходимо вывести всего навсего таблицу, чтобы проверить связку.
Для подключения использую настройки
Порт по умолчанию - 5432
Для того, чтобы раньше времени не накосячить - права к базе сделал только на SELECT
Помогите разобраться. Уже не знаю что и делать то....
Первым делом взять словарь и
Первым делом взять словарь и понять что говорит вам сообщение об ошибке.
А говорит оно о том, что таблицы base_man не существует.
1. Почему в $query =... запрос не в кавычках?
2. Уверены, что имя таблицы указано правильно в смысле регистра использованных букв?
Изменил $query = "SELECT
Изменил
$query = "SELECT tablename FROM pg_tables";
$result = pg_query($connection, $query) or die("Error in query: $query.
" . pg_last_error($connection));
При выполнении выводится:
Error in query: SELECT * FROM base_man. ERROR: relation "base_man" does not exist LINE 1: SELECT * FROM base_man ^
Таблица Base_man существует https://lh4.googleusercontent.com/yMy0KQ3SeSJIIvxOIihJ1oT7OvFfw7LSMxTQzg...
Зайдите в psql и выдайте тот
Зайдите в psql и выдайте тот же самый запрос. Если запрос выполнится без проблем, значит скорее всего вы не в той базе данных. В любом случае, чудес не бывает: либо имя таблицы указано неправильно, либо база не та.
Кстати, у меня возникли
Кстати, у меня возникли проблемы в работе "EnterpriseDB ApachePHP" - компонента PostgreSQL. Может это быть причиной не выполнения запроса?
*YAHOO*
Работает!
There are currently 56 records in the database.
Ура! Спасибо за помощь
Пользуясь случаем, хотел бы еще спросить. В БД сделал представление таблицы в категории "Виды" под именем "BASE_V01".
Можно ли вывести эту таблицу через php?
Работа с представлениями
Работа с представлениями очень похожа на работу с обычными таблицами. Не вижу причин по которым бы SELECT не работал для представлений как для таблиц.
И все же...
Если не сложно, можно для примера - как вывести данные из таблицы? Я еще не очень хорошо разбираюсь в запросах, а в интернете хороших мануалов не увидел...
Очень хороший мануал -
Очень хороший мануал - http://postgresql.ru.net/manual/tutorial-select.html
?
Пытаюсь даже для примера сделать такое:
<?php
$host = "192.168.*.*";
$user = "user_ro";
$pass = "123456";
$db = "S_RO";
// open a connection to the database server
$connection = pg_pconnect ("host=$host dbname=$db user=$user password=$pass");
if (!$connection)
{
die("Could not open connection to database server");
}
// generate and execute a query
$result=pg_query("SELECT id,name FROM base_man ORDER BY name");
$query = "SELECT id,name FROM base_man ORDER BY name";
$result = pg_query($connection, $query) or die("Error in query: $query.
" . pg_last_error($connection));
// get the number of rows in the resultset
$n=pg_num_rows($result);
echo "<table border=1>";
// и теперь в цикле выводим построчно
for($i=0;$i<$n;$i++) echo "<tr><td>",pg_result($result,$i,id),"</td><td>",pg_result($result,$i,name),"</td><td>"</tr>";
echo "</table>";
// close database connection
pg_close($connection);
?>
Пытаюсь вывести данные таблицы Base_man и ничего не выходит.
В ответ выводит:
Error in query: SELECT * FROM base_man. ERROR: relation "base_man" does not exist LINE 1: SELECT * FROM base_man ^
С чем вообще связана эта ошибка?
Error in query: SELECT * FROM base_man. ERROR: relation "base_man" does not exist LINE 1: SELECT * FROM base_man ^
Вы испробовали этот же запрос
Вы испробовали этот же запрос в psql как я вам советовал? Каковы результаты?
Пишет
В psql пишет
ERROR: relation "base" does not exist
Но ведь таблица то есть
Мной писалось
Мной писалось ранее:
Уверены, что подключились в psql к той самой базе данных?
В запросе имя таблицы взято в кавычки?
-?-
В psql запрос с Select пошел.
Назавание базы поставил в кавычки. Получилось такое:
select * from "Base";
Как бы теперь это приминить в php? Переименовать таблицу не представляется возможным, много уже сделано в базе. Как быть?
А что вам мешает поставить
А что вам мешает поставить кавычки в PHP?
-!-
Поставил. В итоге - код:
<?php
$host = "192.168.*.*";
$user = "user_ro";
$pass = "123456";
$db = "S_RO";
$table= "Base";
// open a connection to the database server
$connection = pg_pconnect ("host=$host dbname=$db user=$user password=$pass");
if (!$connection)
{
die("Could not open connection to database server");
}
// generate and execute a query
$query = "SELECT id FROM $table";
$result = pg_query($connection, "SELECT id FROM $table") or die("Error in query: $query.
" . pg_last_error($connection));
// get the number of rows in the resultset
$rows = pg_num_rows($result);
echo "There are currently $rows records in the database.";
// close database connection
pg_close($connection);
?>
Пытался применить изменения в строке $query = "SELECT id FROM $table"; переделав ее в $query = "SELECT id FROM "Base""; была попытка еще и переделать в $query = "SELECT id FROM "Base";
На выходе:
Error in query: SELECT id FROM Base. ERROR: relation "base" does not exist LINE 1: SELECT id FROM Base ^
То есть в Error in query: SELECT id FROM Base. ERROR: relation "base" does not exist LINE 1: SELECT id FROM Base ^ он не видит базу. Затем уже была добавлена строка $table= "Base";
Ошибка так и осталась....
-!-
Можно ли как то задействовать OID таблицы вместо ее имени? Этим можно обойти зависимость регистра....
-!-
Все. Проблема решилась изменением БД - переводом названий в нижний регистр. Спасибо!
А о регистре букв вам
А о регистре букв вам писалось ещё 10 постов назад.
Я же говорю - чудес не бывает.
=)
Да, но тогда изменение регистра не представлялось возможным.
Интересно, а на счет регистров другого вида в постгрес не предусмотрены php команды?...
Вы никак не поймёте, что
Вы никак не поймёте, что PostgreSQL здесь не при чём.
Если вы называете таблицу Base_man, то и запрашивайте таблицу Base_man, а не base_man. Если PHP сам изменяет регистр букв на нижний, то при чём здесь PostgreSQL?
Как раз таки Postgres
Как раз таки Postgres и изменяет регистр символов, PHP этого не делает.
Попробуйте в psql разные варианты Base_man, Base_Man, BASE_MAN - каждый раз получите, что таблицы base_man не существует! Т.е. имена таблиц (а так же колонок и т.п.) приводятся к нижнему регистру. Чтобы Postgres этого не делал, а брал строку как есть, имя нужно заключать в кавычки. Вот так в psql работает:
SELECT * FROM "Base_man"
Другое дело, как вставить кавычки в строку в PHP.
$table = "Base_man"; // это строка Base_man без кавычек. Они являются синтаксическим элементом языка, обрамляют строку, но ей не принадлежат.
$query = "SELECT * FROM $table"; // в данном случае кавычки так же не являются частью строки, вместо $table будет подставлено ее значение. Т.е. в Postgres будет передана строка:
SELECT * FROM Base_man
Что получится, см. выше.
Их нужно экранировать:
$query = "SELECT * FROM \"$table\""
Делать это для всех имен таблиц, колонок и пр. имен, где используется верхний регистр весьма утомительно, к тому ж код становиться трудночитаем.
Проще базу перевести в нижний регистр : ))