这是假的

时间:2014-03-04 02:44:17

标签: php mysql database oop mysqli

if($stmt = $this->Sys->db->prepare("INSERT INTO dj_videos (title, url, caption) VALUES (?, ?, ?)")) {

        $stmt->bind_param('sss', $title, $url, $comment);
        $stmt->execute();
        $stmt->store_result();
        $stmt->fetch();

        if($stmt->num_rows == 1) {

            return TRUE;

        }
        else {

            return FALSE;

        }

返回false,但每次都会将信息插入数据库。它让我大吃一惊。

2 个答案:

答案 0 :(得分:0)

num_rows返回语句结果集中的行数。

您想要affected_rows,它返回上次执行的语句更改,删除或插入的行数

    $stmt->bind_param('sss', $title, $url, $comment);
    $stmt->execute();
    $stmt->store_result();
    $stmt->fetch();

    if($stmt->affected_rows == 1) {

        return TRUE;

    }
    else {

        return FALSE;

    }

答案 1 :(得分:0)

mysqli_stmt::execute成功时返回TRUE,失败时返回FALSE。 所以你只需要返回它的结果:

if($stmt = $this->Sys->db->prepare("INSERT INTO dj_videos (title, url, caption) VALUES (?, ?, ?)")) {
    $stmt->bind_param('sss', $title, $url, $comment);
    return $stmt->execute();
}

顺便说一下,如果语句是UPDATEDELETEINSERT,则可以使用mysqli_stmt_affected_rows()函数确定受影响行的总数。