Php MySQLi语句的嵌套
我有两个准备好的语句(例如),其中第二个语句将在Php MySQLi语句的嵌套,php,mysqli,prepared-statement,nested-loops,Php,Mysqli,Prepared Statement,Nested Loops,我有两个准备好的语句(例如),其中第二个语句将在while(stmt1->fetch()){}循环中执行。但是,内部语句(stmt2)不会在第一个while循环中执行: <?php $mysqli = new mysqli("localhost","root","","test"); if(mysqli_connect_errno()) { printf("connection failed: %s\n",mysqli_connect_error()); ex
while(stmt1->fetch()){}
循环中执行。但是,内部语句(stmt2)不会在第一个while循环中执行:
<?php
$mysqli = new mysqli("localhost","root","","test");
if(mysqli_connect_errno())
{
printf("connection failed: %s\n",mysqli_connect_error());
exit();
}
$stmt1 = $mysqli->prepare("select id from posts");
$stmt2 = $mysqli->prepare("select username from members where id=?");
$stmt1->execute();
$stmt1->bind_result($ID);
while($stmt1->fetch())
{
echo $ID.' ';
/*Inner query*/
$stmt2->bind_param('i',$id);
$id =$ID;
$stmt2->execute();
$stmt2->bind_result($username);
while($stmt2->fetch())
{
echo 'Username: '.$username;
}
/*Inner query ends*/
}
?>
如果我将内部查询部分剪切粘贴到外部while循环之外,它将执行,但它是无用的。我应该怎么做才能正确地执行它呢?为什么要对它执行嵌套循环,而您可以执行内部联接
<?php
$mysqli = new mysqli("localhost","root","","test");
if(mysqli_connect_errno())
{
printf("connection failed: %s\n",mysqli_connect_error());
exit();
}
if($stmt1 = $mysqli->prepare("SELECT posts.id,members.username FROM posts INNER JOIN members ON posts.id=members.id")){
$stmt1->execute();
$stmt1->bind_result($id,$username);
while($stmt1->fetch()){
printf("ID # %d.<br>Username: %s<br><br>",$id,$username);
}
$stmt1->close();
}
$mysqli->close();
?>
First institute告诉我,在while循环中,您的数据库句柄仍然需要访问原始查询。如果创建两个连接,即声明$mysqli2=newmysqli(…)代码>然后使用该对象准备内部查询?是否尝试显示mysqli
错误?在第二个execute()
Stickmysqli\u报告后添加mysqli\u错误($mysqli)
(mysqli\u报告错误| mysqli\u报告严格)代码>位于脚本的最顶端。另外,请确保您在php.ini
文件中启用了display_errors
并将error_reporting
设置为E_ALL
,使用$stmt1->store_result()解决了我的问题,有人能告诉我$stmt1->store_result()的实际功能吗?谢谢您的回答…但是,我很想知道使用内部连接而不是嵌套的好处。@rosemary-它更快更容易理解。你也可以参考这里-