【问题标题】:MySQLi Prepared Statement not working in WHILE LoopMySQLi 准备好的语句在 WHILE 循环中不起作用
【发布时间】:2017-02-20 22:09:48
【问题描述】:

我正在处理一个 While 循环内的查询。但是,第二次运行不起作用。 (While 稍后结束,在一些结果得到回显之后)。我尝试调用第二个查询$stma,但这导致了同样的错误。

错误

Fatal error: Call to a member function bind_param() on a non-object in PATH on line 96

代码

 // Prepare Query
    $stmt = $db->prepare("SELECT id, fullname, shortname FROM languages WHERE (state = '0')");
    $stmt->execute();

    // Get result from query.
    $stmt->bind_result($lang_id, $lang_name, $lang_short);
    
    // While Loop
    while($language = $stmt->fetch()){

        // Get Language Texts
        $stmt = $db->prepare("SELECT id, article_id, article_language, article_text, article_recuse, article_spec FROM article_content WHERE article_id = ? AND article_language = ?");

        $stmt->bind_param("is", $artikel_nummer, $lang_short); // This is line 96.
        $stmt->execute();

        // Get result from query.
        $stmt->bind_result($t_id, $t_articleid, $t_language, $t_text, $t_recuse, $t_spec);
        $stmt->fetch();

我对准备好的语句相当陌生,所以我不确定到底是什么问题。我在查询上运行了 var_dump() 并返回 false,但是,在其他地方或 WHILE 循环之外运行查询正在工作(当我手动定义两个变量时)。

我已经回显了$artikel_nummer$lang_short,它会返回它们的值。

问题如下:为什么第二个查询没有运行,并因此返回上述错误?

【问题讨论】:

  • 你没有对循环使用$language 做任何事情,也没有为$lang_id$lang_name 做任何事情。
  • 您正在覆盖您的 $stmt 变量,同时仍试图在每次迭代中从中获取数据
  • 在将值绑定到它之前,您正在执行该语句。
  • @Phil 我的意思是在第 3 行
  • @Mike 那是使用bind_result的正确方法

标签: php mysqli


【解决方案1】:

在您的循环中,您将覆盖您的 $stm 变量,该变量包含对您的初始准备语句的引用(实际上是您的循环的条件)。对于循环内发生的所有查询,您必须选择不同的变量名称:

while($language = $stmt->fetch()){

        // Get Language Texts
        $_stmt = $db->prepare("SELECT id, article_id, article_language, article_text, article_recuse, article_spec FROM article_content WHERE article_id = ? AND article_language = ?");

        $_stmt->bind_param("is", $artikel_nummer, $lang_short); // This is line 96.
        $_stmt->execute();

        // Get result from query.
        $_stmt->bind_result($t_id, $t_articleid, $t_language, $t_text, $t_recuse, $t_spec);
        $_stmt->fetch();
}

【讨论】:

  • $language在哪里使用?
  • 从技术上讲,它重要吗?我担心问题中发布的错误。
  • 您好。这似乎部分解决了错误。它现在运行一次循环,然后再次显示相同的错误。
  • @Anquaser 请用新信息更新问题。在“更新”标题下添加新的更改
  • 再看一遍我发现了问题。我现在首先创建一个结果,$textresult = $get_text->get_result();,然后获取它,$text = $textresult->fetch_assoc();。这解决了整个问题。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2013-07-23
  • 1970-01-01
  • 2012-04-04
  • 2011-07-01
相关资源
最近更新 更多