我正在创建自己的评论系统,并决定是时候转到MySQLi了。
我想知道的是 - 我这样做了吗?
我是否在必要时释放并关闭结果?我错过了什么吗?
(还有什么能在这个网站上启用语法高亮?代码示例按钮什么都不做)
$mysqli = new mysqli('localhost', 'username', 'password', 'comments');
if($stmt = $mysqli -> prepare("INSERT INTO comments (topid, body, user, active) VALUES (?, ?, ?, ?)"))
{
$stmt->bind_param('isii', $id, $comment, $userid, $mod);
$stmt->execute();
$stmt->close();
}
else
{
$mysqli->close();
echo '{"status":0,"error":'.json_encode('Database Error - Please try again.').'}';
return;
}
$mysqli->close();
这就是我为'while'循环做的事情:
$comments = array();
$mysqli = new mysqli('localhost', 'username', 'password', 'comments');
$mysqli->set_charset('utf8');
if($stmt = $mysqli -> prepare("SELECT user.id as userid, user.name, comments.id, comments.body, comments.dt FROM comments JOIN user ON comments.user = user.id where comments.postid = ? and comments.topid=0 and comments.active=1 ORDER BY comments.id DESC Limit ?, ?"))
{
$stmt->bind_param('iii', $postid, $offset, $limit);
$stmt->execute();
$res = $stmt->get_result();
$stmt->close();
}
while($row = $res->fetch_assoc())
{
$comments[] = new Comment($row);
}
$res->free();
$mysqli->close();
return $comments;
答案 0 :(得分:0)
我正确地这样做了吗?
绝对没有。
有关 API 函数的一件事,被PHP用户误解了。 它们无意在应用程序代码中以原始格式使用。
尽管您可以通过互联网找到所有错误的示例,但您必须创建或采用数据库抽象库,它将在幕后完成所有肮脏的工作。
它必须是什么样的:
include 'db.php';
// if you don't mind to scroll a couple screens to the right yourself,
// please be polite to ones whom you ask to - split your code, make it readable
$sql = "SELECT user.id as userid, user.name, comments.id, comments.body, comments.dt
FROM comments JOIN user ON comments.user = user.id
where comments.postid = ? and comments.topid=0 and comments.active=1
ORDER BY comments.id DESC Limit ?, ?"
return $db->getAll($sql, $postid, $offset, $limit);
而不是保存有意义的代码行,节省无用的重复代码。
include 'db.php';
$sql = "INSERT INTO comments (topid, body, user, active) VALUES (?, ?, ?, ?)";
$res = $db->query($sql, $id, $comment, $userid, $mod);
if (!$res)
{
echo json_encode(array("status" => 0,
"error" => 'Database Error - Please try again.');
}
一些小笔记
由于某些非常奇怪的原因,您没有为插入设置字符集。 你正在使用json错误的方式。 关闭和释放是不必要的。