PHP PG hazırlanan Önermeler sorguları anlamak için

1 Cevap php

How do you read the following code about pg_query_params ve 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"
    );  
}

Bu soru iki kez hazırlanmış deyimi beyan etmek istemiyorum my thread nereye ilgilidir.

Tabloları arasındaki fark, diğer bir yok iken diğeri, bir ad * get_flagged_status_list * olmasıdır. Ben aşağıdaki gibi kodu anlamak

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

However, this is not true, since the code runs pg_prepare in the second iteration too. 1.

1 Cevap

Sizin yayınlanmıştır örnek mantıklı değil - pg_prepare() ve pg_query_params() bağımsız fonksiyonlar normalde birlikte kullanmak olmaz farklı amaçlar ile vardır.

pg_prepare() pg_execute() aracılığı ile daha sonra yürütme için bir açıklama (sorgu) hazırlar. Bu potansiyel optimizasyon olarak yapılır - Eğer o (yeniden) hazırlamak zorunda değildir çünkü ayarlıyoruz, veritabanı sunucusu üzerinde bazı çalışmalar kaydedebilirsiniz hazırlanması, arka arkaya deyimini birçok kez yürütmek gerektiğini önceden biliyorsanız Her arama için deyim.

pg_query_params() (yanı sıra 'basit' bir versiyonu pg_query()) sadece veritabanı sunucusu zorlayarak, doğrudan deyimi (sorgu) yürütür (yeniden) deyimi her zaman hazırlar fonksiyon çağırıldığında .

Yani kısacası, bu

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

Bu gibi size aynı sonucu verecektir

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

Bu şekilde beri hazırlanmış farklı olabilir, bunu bir ad verebilirsiniz neden - tek fark, ikinci durumda, hala pg_execute() daha aramaları için yeniden hazır hazırlanmış deyimi, olması Eğer keyfi için, lütfen, birçok kez olarak yürütebileceği aynı bağlantıda ifadeler.