我尝试将mysqli用于我的论坛数据库。这是我使用的代码:
<meta charset="utf-8">
<?php
include("config.php");
$limits = "6";
$forum_id = "2";
$db = new mysqli($INFO['sql_host'], $INFO['sql_user'], $INFO['sql_pass'], $INFO['sql_database']);
$topics = $db->query("
SELECT
`topics`.`start_date`,
`topics`.`title`,
`topics`.`starter_name`,
`topics`.`posts`,
`topics`.`title_seo`,
`topics`.`tid`,
`posts`.`post`
FROM
`" . $INFO['sql_tbl_prefix'] . "topics` as `topic`,
`" . $INFO['sql_tbl_prefix'] . "posts` as `post`
WHERE
`topics`.`approved` = 1 AND
`topics`.`forum_id`= " . $forum_id . " AND
`posts`.`topic_id` = `topic`.`tid` AND
`posts`.`new_topic` = 1
ORDER BY
`topics`.`start_date`
DESC LIMIT 5");
echo '<ul id="news">';
while ($topic = $topics->fetch_object()) {
$url = $INFO['board_url'] . '/index.php?/topic/' . $topic->tid . '-' . $topic->title_seo . '/';
$topic->post = strip_tags(str_replace(array('[', ']'), array('<', '>'), $topic->post));
$topic->start_date = date("Y.m.d H:i", $topic->start_date);
echo '
<div class="news">
<div class="newsp"><div class="pteksts"><a href="'.$url.'">' . $topic->title . '</div></div></a>
<center><img src="img/news.png"></center>
<div class="teksts" style="padding-bottom: 5px;">' . $topic->post . '</div>
</div>
';
}
echo '</ul>';
?>
我收到的错误:
致命错误:在第35行的/home/public_html/scripts/news.php中的非对象上调用成员函数fetch_object()
答案 0 :(得分:2)
您为表格提供topic
和post
的别名,但之后使用别名topics
和posts
。您需要更改表限定符以使用与表别名相同的拼写。
错误,因为别名topic
与表限定符topics
不同:
SELECT
`topics`.`start_date`, . . .
FROM
`" . $INFO['sql_tbl_prefix'] . "topics` as `topic`,
. . .
右,在更改表限定符以匹配别名后:
SELECT
`topic`.`start_date`, . . .
FROM
`" . $INFO['sql_tbl_prefix'] . "topics` as `topic`,
. . .
也是正确的,但如果它与基表名称相同,则别名是不必要的:
SELECT
`topics`.`start_date`, . . .
FROM
`" . $INFO['sql_tbl_prefix'] . "topics` as `topics`,
. . .
但更重要的是,您应该始终检查$ db-&gt; query()的返回值,因为如果出现错误,它会返回 false 。您无法在 false 上调用任何方法,因为这不是对象。
如果发生这种情况,请报告错误但不要尝试从结果中获取。它不起作用。
$topics = $db->query(...);
if ($topics === false) {
die($db->error);
}
// now we can be sure it's safe to call methods on $topics
while ($topic = $topics->fetch_object()) {
. . .
重新评论输出为空白:
我刚刚测试了这个脚本,它大部分都有效,所以我无法猜出出了什么问题。我建议你阅读你的http服务器的错误日志,这是输出许多PHP通知和错误的地方。
我确实看到以下声明:
Notice: A non well formed numeric value encountered in /Users/billkarwin/workspace/SQL/22159646.php on line 51
这一行是这样的:
$topic->start_date = date("Y.m.d H:i", $topic->start_date);
问题是PHP的date()函数采用整数时间戳,而不是日期字符串。
您可能希望使用MySQL DATE_FORMAT()函数来格式化SQL中的日期。