您如何阅读以下有关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"
);
}
这个问题与my thread有关,我不想宣布两次准备好的陈述。
语句之间的区别在于另一个语句的名称为 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。
答案 0 :(得分:8)
您发布的示例没有意义 - pg_prepare()
和pg_query_params()
是具有不同目的的独立函数,通常不会同时使用。
pg_prepare()
准备一个语句(查询),以便以后通过pg_execute()
执行。这是作为潜在的优化完成的 - 如果您事先知道需要连续多次执行该语句,那么事先准备它可以节省数据库服务器上的一些工作,因为它不需要(重新)准备每次通话的声明。
pg_query_params()
(以及它的'simpler'版本pg_query()
)只是直接执行语句(查询),强制数据库服务器在每次调用函数时(重新)准备语句。
总之,这个
$result = pg_query_params($query, $params);
将为您提供与此
完全相同的结果$statement = pg_prepare($query);
$result = pg_execute($statement, $params);
唯一的区别是,在第二种情况下,你仍然有准备好的声明,准备重用以更多地调用pg_execute()
- 这就是为什么你可以给它一个名字,因为这样你可以有不同的在同一个连接上准备好的语句,你可以按任意顺序多次执行。