MySQLi Prepared语句在WHILE循环中不起作用

时间:2017-02-20 22:09:49

标签: php mysqli

你好,

我正在使用While循环中的查询。但是,第二次运行不起作用。 (稍后结束,在一些结果得到回应之后)。我尝试过调用第二个查询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()

我对准备好的陈述相当新,所以我不确定究竟是什么问题。我在查询上运行$artikel_nummer并返回false,但是,在WHILE循环的其他位置或外部运行查询是有效的(当我手动定义两个变量时)。

我回复了$lang_shortarray = [1,1,1,1,1,1,1,1,1,,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,2,2,2],并返回了它们的值。

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

1 个答案:

答案 0 :(得分: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();
}