验证记录是否成功插入的最佳方法是什么?
我正在使用 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/>";
}
}
两种方式都很好,但我不确定什么是最好的,你能帮我吗?
- PDO实际上不会抛出异常,除非你告诉它。所以你的
try..catch
完全是多余的,永远不会做任何事情。 - 如果语句执行无误,则表示数据已成功插入/更新。无需计算行数,除非您对更改了多少行的具体细节感兴趣(这与"数据现在在我的数据库中吗?">是不同的主题(。
鉴于此,我建议将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代码是否应该特别关注它是值得怀疑的。