0

我正在创建自己的评论系统,并决定是时候转向 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;
4

1 回答 1

0

我这样做正确吗?

绝对没有。

关于API函数,PHP 用户误解了一件事。它们不打算在应用程序代码中以原始形式使用。
尽管您可以在 Internet 上找到所有错误的示例,但您必须创建或采用一个数据库抽象库,它将在幕后完成所有肮脏的工作。

它必须是什么样的:

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 的方式错误。关闭和释放只是不必要的。

于 2013-06-20T07:08:23.747 回答