powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP, Postgres кто-то тупит
10 сообщений из 10, страница 1 из 1
PHP, Postgres кто-то тупит
    #38854041
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет All! СН2015Г!
Сразу к теме!
Пишу на пхп. Написал функцию типа:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public function deleteRow($table, array $data) {
        $return = array();
        if($this->connect() == true) {
            $result = pg_delete($this->connect, $table, $data, PGSQL_CONV_FORCE_NULL|PGSQL_DML_EXEC );
            if(!$result) {
                $return['state'] = 'ERROR';
                $return['message'] =App::init()->showErrorMessage("Ошибка при удалении!",pg_last_error($this->connect));
            } else {
                $return['state'] = 'SUCCESSFUL';
            }
            $this->close();
        }
        return $return;
    }


Спецом удаляю запись на которую есть ссылки в других таблицах.
Естественно в PG ошибка и соответственно if(!$result) выполняется.
Так вот, то что возвращает эта функция идет потом в js:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
$.post("deleterow/", {"context_id":"' . $this->id . '"}, function(data) {
   alert(JSON.stringify(data));
   //var response = $.parseJSON(data);
   //alert(response);
   //$.each(response, function(index) {
   //    alert(response[index].state);
   //});
});



И тут вопрос на который пол дня я уже потратил!
pg_delete генерит исключение, а оно мне возвращается в месте с тем что возвращает функция deleteRow.
А мне надо чтобы приходил ответ только то что возвращает функция deleteRow.
короче вот ответ:
код<br />
<b>Warning</b>: pg_delete(): ERROR: update or delete on table "users" violates foreign key constraint "fk_k025do01a48fmw803mfehxg0n" on table "user_organizations"
DETAIL: Key (id)=(1) is still referenced from table "user_organizations".
in <b>...\Classes\base\Postgres.php</b> on line <b>165</b><br />
{"1":{"state":"ERROR","message":"<div style=\"display:none\" id=\"div-dialog-warning\">\r\n <p><span class=\"ui-icon ui-icon-alert\" style=\"float:left; margin:0 7px 20px 0;\"><\/span><div\/>ERROR: update or delete on table \"sys_users\" violates foreign key constraint \"fk_k025do01a48fmw803mfehxg0n\" on table \"user_organizations\"\nDETAIL: Key (id)=(1) is still referenced from table \"user_organizations\".<\/p>\r\n <\/div><script type=\"text\/javascript\">\r\n $(\"#div-dialog-warning\").dialog( {\r\n buttons: {\r\n \"Ok\" : function () {\r\n $(this).dialog(\"close\");\r\n }\r\n },\r\n close: function(event, ui)\r\n {\r\n $(this).dialog( \"close\" );\r\n $(this).dialog(\"destroy\").remove();\r\n },\r\n dialogClass: \"error\",\r\n height: 160,\r\n modal: true,\r\n resizable: false,\r\n title: Ошибка при удалении!\r\n } );\r\n <\/script>"}}
А должно только это:
код{"1":{"state":"ERROR","message":"<div style=\"display:none\" id=\"div-dialog-warning\">\r\n <p><span class=\"ui-icon ui-icon-alert\" style=\"float:left; margin:0 7px 20px 0;\"><\/span><div\/>ERROR: update or delete on table \"sys_users\" violates foreign key constraint \"fk_k025do01a48fmw803mfehxg0n\" on table \"user_organizations\"\nDETAIL: Key (id)=(1) is still referenced from table \"user_organizations\".<\/p>\r\n <\/div><script type=\"text\/javascript\">\r\n $(\"#div-dialog-warning\").dialog( {\r\n buttons: {\r\n \"Ok\" : function () {\r\n $(this).dialog(\"close\");\r\n }\r\n },\r\n close: function(event, ui)\r\n {\r\n $(this).dialog( \"close\" );\r\n $(this).dialog(\"destroy\").remove();\r\n },\r\n dialogClass: \"error\",\r\n height: 160,\r\n modal: true,\r\n resizable: false,\r\n title: Ошибка при удалении!\r\n } );\r\n <\/script>"}}

Может кто нибудь объяснит почему так происходит?
...
Рейтинг: 0 / 0
PHP, Postgres кто-то тупит
    #38854085
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторviolates foreign key constraint
переведи
...
Рейтинг: 0 / 0
PHP, Postgres кто-то тупит
    #38854099
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow,

авторнарушает ограничение внешнего ключа
...
Рейтинг: 0 / 0
PHP, Postgres кто-то тупит
    #38854109
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том что не надо за меня выводить какие-то там сообщения, исключения и т.п. я их сам обработаю и выведу в другом виде.
нужно короче что то типа try catch сделать
...
Рейтинг: 0 / 0
PHP, Postgres кто-то тупит
    #38854210
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVДело в том что не надо за меня выводить какие-то там сообщения, исключения и т.п. я их сам обработаю и выведу в другом виде.
нужно короче что то типа try catch сделать

Код: php
1.
2.
3.
if(!$result) {
                $return['state'] = 'ERROR';
                $return['message'] =App::init()->showErrorMessage("Ошибка при удалении!",pg_last_error($this->connect));



ну ты определись, да
...
Рейтинг: 0 / 0
PHP, Postgres кто-то тупит
    #38854237
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowну ты определись, даТут автору не нравистя что php варнинги печатает :), а они не ложатся под синтаксис json, вот и все проблема :). Кстати вопрос правильно поставили что кто то тупит, а не что то.
...
Рейтинг: 0 / 0
PHP, Postgres кто-то тупит
    #38854243
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow,

ScareCrowAndronovMVДело в том что не надо за меня выводить какие-то там сообщения, исключения и т.п. я их сам обработаю и выведу в другом виде.
нужно короче что то типа try catch сделать

Код: php
1.
2.
3.
if(!$result) {
                $return['state'] = 'ERROR';
                $return['message'] =App::init()->showErrorMessage("Ошибка при удалении!",pg_last_error($this->connect));



ну ты определись, да

Нет, не верно!
Независимо от того вернет ли что нить result или нет, если будет исключение, Apache его кинет в браузер.
Я по другому немного пошел. Теперь использую асинхронные запросы к БД, так можно определить что вернется.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public function deleteRow($table, array $data) {
        $return = array();
        if($this->connect() == true) {
            $this->queryCounter++;
            $query = pg_delete($this->connect, $table, $data, PGSQL_CONV_FORCE_NULL | PGSQL_DML_STRING );
            $this->log("Query [".$this->queryCounter."]: ".$query);
            if (!pg_connection_busy($this->connect)) {
                $this->log("    Query run...");
                pg_send_query($this->connect, $query);
            }
            $result = pg_get_result($this->connect);
            if(pg_result_error($result) != null) {
                $code = pg_result_error_field($result, PGSQL_DIAG_SQLSTATE);
                $return['state'] = 'ERROR';
                $return['message'] = App::init()->showErrorMessage("Ошибка при удалении!", Postgres::getMessageByCode($code));
                $this->log("    ".pg_result_error($result));
            } else {
                $return['state'] = 'SUCCESSFUL';
                $this->log("    Query is successfully completed!");
            }
            $this->close();
        } else {
            $this->log("    ERROR: Connection does not exist!");
        }
        $this->serialize();
        return $return;
    }



Но все равно спасибо за внимание!
Надеюсь чем нить помог следующему спрашивальщику!
...
Рейтинг: 0 / 0
PHP, Postgres кто-то тупит
    #38854246
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SmeL_md,

Ну молодец что понял, и коль уж намекаешь "кто то тупит", то дал бы ответ лучше
...
Рейтинг: 0 / 0
PHP, Postgres кто-то тупит
    #38854256
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНет, не верно!
Независимо от того вернет ли что нить result или нет, если будет исключение, Apache его кинет в браузер.

неа.

mixed pg_delete ( resource $connection , string $table_name , array $assoc_array [, int $options = PGSQL_DML_EXEC ] )

Return Values ¶

Returns TRUE on success or FALSE on failure
...
Рейтинг: 0 / 0
PHP, Postgres кто-то тупит
    #38854308
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow,

Я это видел. pg_delete действительно возвраoается true или false или строку запроса если стоит спец флаг PGSQL_DML_STRING в option. Код внутри pg_delete в моем случае генерит исключение, которое веб-сервер мне всегда покажет. Проблема была не в том что функция не то возвращает, а в том, что помимо результатов я еще и сообщение об ошибке получал.
Правильно сказал SmeL_md =)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP, Postgres кто-то тупит
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]