MySQLi编写了语句格式

时间:2013-06-20 04:03:10

标签: mysqli prepared-statement

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

1 个答案:

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