Для понимания запросов в PHP PG-подготовленных государственных деятелей - PullRequest
1 голос
/ 22 августа 2009

Как прочитать следующий код о pg_query_params и pg_prepare?

$result = pg_query_params ( $dbconn,        
    "SELECT flagged_for_moderator_removal           // unsure about Repetition here
    FROM questions 
    WHERE question_id = $1",
    array ( $_GET['question_id'] ) );

if ( pg_num_rows ( $result ) == 0 ) { 
    $result = pg_prepare ( $dbconn, "get_flagged_status_list",    
        "SELECT flagged_for_moderator_removal       // unsure about Repetition here
        FROM questions 
        WHERE question_id = $1"
    );  
} 

Этот вопрос относится к моей теме , где я не хочу объявлять дважды подготовленное утверждение.

Различие между утверждениями заключается в том, что у другого есть имя get_flagged_status_list , а у другого - нет. Я понимаю код следующим образом

Iteration |  1                     2
----------------------------------------------------------------------
           run pg_query_params    run pg_qeury_params
           run pg_prepare         
           run pg_execute         run pg_execute

Однако это не так, поскольку код запускается pg_prepare и во второй итерации. 1.

1 Ответ

8 голосов
/ 23 августа 2009

Ваш опубликованный пример не имеет смысла - pg_prepare() и pg_query_params() являются независимыми функциями с различными целями, которые вы обычно не используете совместно.

pg_prepare() подготавливает оператор (запрос) для последующего выполнения через pg_execute(). Это делается как потенциальная оптимизация - если вы заранее знаете, что вам нужно будет выполнять оператор много раз подряд, его предварительная подготовка может сэкономить некоторую работу на сервере базы данных, поскольку не нужно (повторно) подготавливать выписка за каждый звонок.

pg_query_params() (а также его «более простая» версия pg_query()) просто выполняет оператор (запрос) напрямую, заставляя сервер базы данных (заново) подготавливать оператор при каждом вызове функции.

Короче говоря, это

$result = pg_query_params($query, $params);

даст вам тот же результат, что и этот

$statement = pg_prepare($query);
$result = pg_execute($statement, $params);

Единственное отличие состоит в том, что во втором случае у вас все еще есть подготовленный оператор, готовый к повторному использованию для дополнительных вызовов pg_execute() - поэтому вы можете дать ему имя, поскольку таким образом вы можете иметь различные подготовленные операторы на том же соединении, которое вы можете выполнить как угодно много раз в произвольном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...