你如何阅读下面的代码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"
);
}
Run Code Online (Sandbox Code Playgroud)
语句之间的区别在于另一个语句的名称为get_flagged_status_list,而另一个语句没有.我理解代码如下
Iteration | 1 2
----------------------------------------------------------------------
run pg_query_params run pg_qeury_params
run pg_prepare
run pg_execute run pg_execute
Run Code Online (Sandbox Code Playgroud)
但是,事实并非如此,因为代码pg_prepare也在第二次迭代中运行.1.
您发布的示例没有意义 - pg_prepare()并且pg_query_params()是具有不同目的的独立函数,您通常不会将它们结合使用.
pg_prepare()准备一个语句(一个查询)以便以后执行pg_execute().这是作为潜在的优化完成的 - 如果您事先知道需要连续多次执行该语句,那么事先准备它可以节省数据库服务器上的一些工作,因为它不需要(重新)准备每个电话的声明.
pg_query_params()(以及它的'更简单'版本pg_query())只是直接执行语句(查询),强制数据库服务器每次调用函数时(重新)准备语句.
所以总之,这个
$result = pg_query_params($query, $params);
Run Code Online (Sandbox Code Playgroud)
会给你与此完全相同的结果
$statement = pg_prepare($query);
$result = pg_execute($statement, $params);
Run Code Online (Sandbox Code Playgroud)
唯一的区别是,在第二种情况下,你仍然有准备好的语句,准备重用更多的调用pg_execute()- 这就是为什么你可以给它一个名字,因为这样你就可以在同一个连接上有不同的预备语句可以按任意顺序多次执行.
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |