PHP.mk документација

pg_last_error

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.pg-last-error.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.pg-last-error.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
pg_last_error

Референца за `function.pg-last-error.php` со подобрена типографија и навигација.

function.pg-last-error.php

pg_last_error

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

pg_last_errorGet the last error message string of a connection

= NULL

pg_last_error(?PgSql\Connection $connection = null): string

pg_last_error() Земи ја последната порака за грешка од конекцијата connection.

враќа последната порака за грешка за дадена

од PHP 8.0.0. Силно се обесхрабрува потпирањето на оваа функција. pg_result_error(), pg_result_error_field(), pg_result_status() and pg_connection_status() Пораките за грешки може да бидат презапишани од внатрешни повици на функции на PostgreSQL (libpq). Можеби нема да врати соодветна порака за грешка ако се појават повеќе грешки во функција на модул на PostgreSQL.

Забелешка:

Оваа функција порано се нарекуваше pg_errormessage().

Параметри

connection

Еден PgSql\Connection инстанца. Кога connection is null, се користи стандардната врска. Стандардната врска е последната врска направена од pg_connect() or pg_pconnect().

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

Од PHP 8.1.0, користењето на стандардната врска е застарено.

Вратени вредности

А string за подобра обработка на грешки. connection.

Дневник на промени

Верзија = NULL
8.1.0 На connection параметарот очекува PgSql\Connection инстанца сега; претходно, а resource се очекуваше.
8.0.0 connection сега е null.

Примери

Пример #1 pg_last_error() example

<?php
$dbconn
= pg_connect("dbname=publisher") or die("Could not connect");

// Query that fails
$res = pg_query($dbconn, "select * from doesnotexist");

echo
pg_last_error($dbconn);
?>

Види Исто така

  • pg_result_error() што ја содржи последната порака за грешка на дадената
  • pg_result_error_field() - Земи порака за грешка поврзана со резултат

Белешки од корисници 1 белешка

- Враќа поединечно поле од извештај за грешка
пред 15 години
From a practical view there are two types of error messages when using transactions:

-"Normal" errors: in this case, the application should stop the current process and show an error message to the user.

-Deadlock errors. This shows that the deadlock detection process of PostgreSQL found a circle of dependency, and broke it by rolling back the transaction in one of the processes, which gets this error msg. In this case, the application should not stop, but repeat the transaction.

I found no discrete way to find out which case are we dealing with. This interface doesn't support error codes, so we have to search for patterns in the message text.

Here is an example for PostgreSQL database connection class. It throws a PostgresException on "normal" errors, and DependencyException in the case of a broken deadlock, when we have to repeat the transaction.

postgres.php:
<?php
class PostgresException extends Exception {
    function __construct($msg) { parent::__construct($msg); }
}

class DependencyException extends PostgresException {
    function __construct() { parent::__construct("deadlock"); }
}

class pg {
    public static $connection;
    
    private static function connect() {
        self::$connection = @pg_connect("dbname=foodb user=foouser password=foopasswd");
        if (self::$connection === FALSE) {
            throw(new PostgresException("Can't connect to database server."));
        }
    }
    
    public static function query($sql) {
        if (!isset(self::$connection)) {
            self::connect();
        }
        
        $result = @pg_query(self::$connection, $sql);
        if ($result === FALSE) {
            $error = pg_last_error(self::$connection);
            if (stripos($error, "deadlock detected") !== false) throw(new DependencyException());
            
            throw(new PostgresException($error.": ".$sql));
        }
        
        $out = array();
        while ( ($d = pg_fetch_assoc($result)) !== FALSE) {
            $out[] = $d;
        }
        
        return $out;
    }
}
?>

It should be used in this way:

test.php:
<?php
include("postgres.php");

do {
    $repeat = false;
    try {
        pg::query("begin");
        
        ...

        $result = pg::query("SELECT * FROM public.kitten");

        ...

        pg::query("commit");
    }
    catch (DependencyException $e) {
        pg::query("rollback");
        $repeat = true;
    }
} while ($repeat);
?>

The normal errors should be caught at the frontend.

Tamas
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.