Проблема вывода данных через php

Доброго времени суток.

У меня появилась проблема с БД 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\""
Делать это для всех имен таблиц, колонок и пр. имен, где используется верхний регистр весьма утомительно, к тому ж код становиться трудночитаем.
Проще базу перевести в нижний регистр : ))

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023