Hom*_*mer 1 php mysql mysqli prepare
我已经尝试了几天来修复我的PHP代码的这一部分,但似乎没有任何工作.
我基本上是一个超级新手.几乎在上周,我决定尝试使用PHP从头创建一个博客.这需要我学习PHP.所以,通过跟踪教程和阅读像w3schools这样的网站,我慢慢地学习了适用的PHP.
无论如何,这是我正在研究的代码的一部分:
$query = $db->prepare("SELECT post_id, title, body, date_posted, category
FROM posts INNER JOIN categories ON
categories.category_id=posts.category_id ORDER BY
post_id desc limit $start, $per_page");
$query->execute();
$query->bind_result($post_id, $title, $body, $date_posted, $category);
$author = $db->prepare("SELECT username FROM posts INNER JOIN user ON
user.user_id=posts.user_id");
print_r( $author->error );
$author->execute();
$author->bind_result($username);
Run Code Online (Sandbox Code Playgroud)
让我解释.我有3个数据库表:帖子,类别和用户.大多数帖子信息都在"帖子"中,包括category_id和user_id,但不包括类别和用户的实际名称.我从其他两个表中得到了那些.$ db使用mysqli.
上面代码的$ query部分工作得很好.$ author准备行是我遇到问题的地方.我根据$ query prepare行写了那行.
但是当我运行代码时,我得到"注意:试图获取非对象的属性." 这导致$ author-> execute()无效并产生错误:"致命错误:在非对象上调用成员函数execute()."
所以,再次,因为我是一个巨型新手,我认为修复是非常简单的,可能与我对PHP的无知有关.有没有人有任何想法或建议?在此先感谢您的帮助.
错误是说$ author是非对象.
如果$author = $db->prepare()已正确执行,它将返回一个mysqli_stmt对象.相反,它可能会返回false
您可以通过以下方式确认:
echo($author); // Should be false
echo($db->error); // A string representation of your error.
Run Code Online (Sandbox Code Playgroud)
为后代编辑:
一个更好的做法,容错的实施准备()语句可能类似于下面的,如描述在这里:
$stmt = $mysqli->prepare($query) or trigger_error($mysqli->error);
Run Code Online (Sandbox Code Playgroud)
你应该看看这里的文档:http: //www.php.net/manual/en/mysqli.prepare.php
此外,如果您是PHP新手,我建议使用PDO库而不是mysqli,一旦开始获取结果,它们就更容易使用了.