【发布时间】:2014-07-09 10:12:14
【问题描述】:
样本1:
<?php
$mysqli = new mysqli("localhost","root","","test");
/*check connection*/
if(mysqli_connect_errno())
{
printf("connection failed: %s\n",mysqli_connect_error());
exit();
}
/*create prapared statement*/
$stmt1 = $mysqli->prepare("select id from posts");
$stmt2 =$mysqli->prepare("select username from members where id=?");
test($stmt1,$stmt2);//function call
function test($stmt1,$stmt2)
{
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($ID);
while($stmt1->fetch())
{
**/*bind params*/
$stmt2->bind_param('i',$id); /*HERE,BINDING MANY TIMES*/**
/*set params*/
$id =$ID;
/*execute prapared statement*/
$stmt2->execute();
/*bind results*/
$stmt2->bind_result($username);
while($stmt2->fetch())
{
echo 'Username: '.$username.'<br/>';
}
}
}
?>
样本2:
<?php
$mysqli = new mysqli("localhost","root","","test");
/*check connection*/
if(mysqli_connect_errno())
{
printf("connection failed: %s\n",mysqli_connect_error());
exit();
}
/*create prapared statement*/
$stmt1 = $mysqli->prepare("select id from posts");
$stmt2 =$mysqli->prepare("select username from members where id=?");
test($stmt1,$stmt2);//function call
function test($stmt1,$stmt2)
{
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($ID);
**/*bind params*/
$stmt2->bind_param('i',$id); /*HERE,BINDING ONCE*/**
while($stmt1->fetch())
{
/*set params*/
$id =$ID;
/*execute prapared statement*/
$stmt2->execute();
/*bind results*/
$stmt2->bind_result($username);
while($stmt2->fetch())
{
echo 'Username: '.$username.'<br/>';
}
}
}
?>
参数绑定方式(在示例 1 和示例 2 中以粗体显示)或 MySQLi 自动处理这两种方式是否存在性能差异?在 sample1 中,虽然没有必要将 bind_param 包含在 while 循环中。
【问题讨论】: