验证记录是否成功插入的最佳方法是什么?

时间:2014-12-19 04:21:09

标签: php mysql pdo

验证记录是否成功插入的最佳方法是什么?

我正在使用PDO语句。

此:

/*******************
Update user picture
********************/
function updateuserpicture($userid, $filename) {
    include ("./businesslogic/dbconnection/cfg.php");
    try {
        $db = new PDO('mysql:host='.$server.';dbname='.$db,$db_user,$db_password);
        $sql = $db->prepare("Update usersdata set userpicture=:filename where userid=:userid");
        $sql->bindParam(':filename',$filename);
        $sql->bindParam(':userid',$userid);
        $sql->execute();
        $sqlresult = $sql->rowCount();
        $db = null;
        return $sqlresult; //Then validate if result is greater than 0.
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
    }
}

或者这个:

/*******************
Update user picture
********************/
function updateuserpicture($userid, $filename) {
    include ("./businesslogic/dbconnection/cfg.php");
    try {
        $db = new PDO('mysql:host='.$server.';dbname='.$db,$db_user,$db_password);
        $sql = $db->prepare("Update usersdata set userpicture=:filename where userid=:userid");
        $sql->bindParam(':filename',$filename);
        $sql->bindParam(':userid',$userid);
        if ($sql->execute()) {
            $db = null;
            return TRUE; 
        } else {
            $db = null;
            return FALSE;
        } //Then validate if result is TRUE or FALSE.
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
    }
}

两种方式都很好,但我不确定什么是最好的,你能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

  1. 除非你告诉它,否则PDO实际上不会抛出异常。所以你的try..catch完全是多余的,永远不会做任何事。
  2. 如果语句执行没有错误,则表示数据已成功插入/更新。不需要计算行数,除非您对更改了多少行的具体细节感兴趣(这与&#34;不同的主题现在是我数据库中的数据?&#34; )。
  3. 鉴于此,我建议将PDO设置为在出现错误时抛出异常,而不进行任何进一步的显式检查:

    $db = new PDO("mysql:host=$server;dbname=$db", $db_user, $db_password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $sql = $db->prepare('UPDATE users SET userpicture = :filename WHERE userid = :userid');
    $sql->bindParam(':filename', $filename);
    $sql->bindParam(':userid', $userid);
    $sql->execute();
    

    这可能仍然意味着如果用户ID不存在,则该语句不执行任何操作。这将指出您的应用中存在更深层次的错误,如果PDO代码应该特别关注它,那么这是一个值得怀疑的问题。