我正在浏览关于使用数据库执行菜单的视频教程。我没有像在视频中那样使用过程式PHP来做这件事,而是试着用准备好的语句OOP风格来做到这一点。它不起作用,我不明白为什么。PHP在准备好的语句中准备了语句
它运行良好,直到第17行,在那里与此错误死亡:
Fatal error: Call to a member function bind_param() on a non-object in C:\wamp\www\widget_corp\content.php on line 17
而这里的代码:
<?php
$query = $connection->prepare('SELECT menu_name, id FROM subjects ORDER BY position ASC;');
$query->execute();
$query->bind_result($menu_name, $sid);
while ($query->fetch()){
echo "<li>{$menu_name} {$sid}</li>";
$query2 = $connection->prepare('SELECT menu_name FROM pages WHERE subject_id = ? ORDER BY position ASC;');
$query2->bind_param("i", $sid); //This is line 17
$query2->execute();
$query2->bind_result($menu_name);
echo "<ul class='pages'>";
while ($query2->fetch()){
echo "<li>{$menu_name}</li>";
}
echo "</ul>";
}
$query->close();
?>
是不可能内stmt-做一份准备好的声明>取();?
您使用的是mysqli扩展,对不对?你有没有考虑过使用PDO?对于PDO,你可以将异常设置为“错误处理程序”,这会让你更难以错过sql错误(就像这种情况下最可能由第16行导致的错误;-)) – VolkerK 2011-04-07 10:27:36
是的,它是mysqli,但它不是sql错误。在终端中运行SQL查询,工作正常。 – thekodols 2011-04-07 10:59:21