当前位置: 首页 > 知识库问答 >
问题:

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

汪典
2023-03-14

为什么bind_param()在我的中,而循环不起作用

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

我要在这里做的是显示来自user表的所有数据(如果$key未设置),然后,
我想使用if语句区分显示的值。我尝试在数据库管理器中执行准备好的查询,它的工作原理。但在这种情况下...我的查询似乎返回false。那么,有什么想法吗?这是密码,

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();
}

提前感谢您能提供的任何帮助。

正如marcellorvalle所说,mysql不能同时维护两个查询,在这种情况下,我需要将所有值存储到一个array()变量中。所以脚本是这样的:

$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();

共有2个答案

轩辕嘉平
2023-03-14

根据消息,$temen似乎不是一个对象。尝试使用var_dump($temen)调试它。似乎是$conn-

您可以检查任何回显$conn的错误-

宗政霄
2023-03-14
  1. 它不是bind_param()不起作用,而是prepare()
 类似资料:
  • 问题内容: 我正在用Java编写电台代码,并且正在使用一个线程来当然播放流。我在线程的run方法中有一个while循环,该循环检查名为ShouldPlay的变量是否为true,以及是否运行该变量。播放器。然后,我有一个pause()方法,将变量设置为false,并且自然希望它在变量为false时不运行播放器。我创建了一个小示例,说明如何在下面进行设置: 我想发生的事情是,当线程首次运行时,它应该打

  • 问题内容: 在这段代码中,为什么不按我的意愿初始化我的数组?是不是for-each循环并非旨在做到这一点,或者我只是没有正确使用它? 问题答案: for-each循环不适用于这种情况。您不能使用for-each循环来初始化数组。您的代码: 将转换为以下内容: 如果这是一个对象数组,它仍然会失败。基本上,for-each依次将集合或数组中的每个条目分配给您提供的变量,然后可以使用该变量。该变量 不

  • 问题内容: 我有一个项目,我试图在回调中使用weakrefs,但我不明白我在做什么错。我创建了简化的测试,以显示我困惑的确切行为。 为什么在此测试中test_a可以正常工作,但是self.MyCallbackB的weakref在类初始化和调用test_b之间消失了?我以为只要实例(a)存在,对self.MyCallbackB的引用就应该存在,但是不存在。 问题答案: 您需要一个WeakMethod

  • 我安装了SpaceVim来测试它和< kbd >;(分号)不起作用。< code >:nmap;表示“未找到映射”。问题是我在源代码中找不到它的未映射位置。在vim中有不同的方法来重新映射/取消映射一个键吗?我应该如何找到这些方法?

  • 我试图制作一个for循环脚本,使用Angular创建订单,并将其添加到网页中。我在使用某些for循环时遇到了问题,因为当我使用控制台时。log(),它只输出外部循环,不输出内部循环。我需要把变量的顺序传递给另一个函数,所以我需要这个顺序来获得正确的数据。 结果: 它重复最后一个外环值,而不输出内环值。我对Javascript还是很陌生的,所以我需要一些洞察力和解决方案,也许还有简单的方法?谢谢!