你好,
我正在使用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_short
和array = [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]
,并返回了它们的值。
问题如下:为什么第二个查询没有运行,因此如上所述返回错误?
答案 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();
}