Php 为什么在循环不起作用时在内部绑定_param()?返回致命错误

Php 为什么在循环不起作用时在内部绑定_param()?返回致命错误,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,为什么我的while循环中的bind_param不起作用? 我明白了 致命错误:对中的非对象调用成员函数bind_param 这里我要做的是显示用户表中的所有数据,如果没有设置$key, 我想使用if语句来区分显示的值。我曾尝试在数据库管理器中执行准备好的查询,结果很好。但是在这种情况下。。我的问题似乎是错误的。你知道吗?这是密码 function cariTemen($key) { require 'settings.php'; $my_id = $_SESSION['user

为什么我的while循环中的bind_param不起作用? 我明白了

致命错误:对中的非对象调用成员函数bind_param

这里我要做的是显示用户表中的所有数据,如果没有设置$key, 我想使用if语句来区分显示的值。我曾尝试在数据库管理器中执行准备好的查询,结果很好。但是在这种情况下。。我的问题似乎是错误的。你知道吗?这是密码

function cariTemen($key) {
    require 'settings.php';
    $my_id = $_SESSION['user_id'];

    $stmt = $conn->prepare ("SELECT user_id,nama_asli FROM user WHERE username LIKE ? OR nama_asli LIKE ?");
    $key = '%'.$key.'%';
    $stmt->bind_param('ss',$key,$key);
    $stmt->execute();
    $stmt->bind_result($id,$nama);

    //MODIFIED FROM HERE
    while($stmt->fetch()) {
        $temen_id = $id;
        $username = $nama;

        $temen = $conn->prepare("SELECT id_temenan FROM temenan WHERE temen_id = ? AND user_id = ?");
        $temen->bind_param('ii',$temen_id,$my_id); //ERROR IS HERE
        $temen->execute();
        $temen->store_result();
        $jml= $temen->num_rows;

        if($jml > 0) {

            echo $username.' [Temenan]<br>';

        } else {

            echo $username.' <a href="add.php?user_id='.$temen_id.'"">Temenin</a><br>';
        }
    }

    $stmt->close();
}
提前感谢您提供的任何帮助

如前所述,mysql不能同时维护2个查询,在这种情况下,我需要将所有值存储到一个数组变量中。所以脚本是这样的:

$user_id = array(); 
$username = array();
$i = 0;

while($stmt->fetch()) {
    $user_id[$i] = $id;
    $username[$i] = $nama;
    $i++;
}

$stmt->close();

for ($j= 0 ; $j <= $i; $j++) {
    $temen = $conn->prepare("SELECT id_temenan FROM temenan WHERE temen_id = ? AND user_id = ?");
    $temen->bind_param('ii',$user_id[$j],$my_id);
    $temen->execute();
    $temen->store_result();
    $jml= $temen->num_rows;

    if($jml > 0) {

        echo  '<a href="profil.php?user_id='.$user_id[$j].'"">'.$username[$j].'</a> [TeMeNan]<br>';

    } else {

        echo ' <a href="profil.php?user_id='.$user_id[$j].'"">'.$username[$j].'</a> <a href="add.php?user_id='.$user_id[$j].'"">[TeMeNin]</a><br>';

    }

}
$temen->close();

根据消息,$temen似乎不是一个对象。尝试使用var_dump$temen调试它。似乎$conn->prepare出于某种原因返回false,而false不是一个对象

您可以检查任何回显$conn->error的错误,以查看发生了什么

不是绑定参数不起作用,而是准备。 它不起作用,因为准备好的查询在默认情况下是无缓冲的,因此,为了在没有从第一个查询获得所有结果的情况下运行另一个查询,必须首先在第一个查询上调用store_result。 当您执行嵌套查询时,100的99次,这意味着您应该使用
准备好后,执行echo$conn->error;并查看您得到了什么,用户和用户名var_dump$temen return false和$temen->error return命令不同步;您现在无法运行此命令…如果下面的answeer是正确的,请将其标记为已接受。我是否应将其标记为已接受,如果下面的答案只是指导我如何查找错误,但对于指定的错误,解决方案将不同?var_dump$temen return false和$temen->error return Commands out of sync;您现在无法运行此命令…mysql似乎无法同时维护两个查询。也许您应该获取数组上的第一个查询,释放该语句,并对其进行迭代。看看这里:很明显,mysql可以同时维护两个查询。那么,问题是什么?