我应该在mysql_num_rows
或rowCount
查询中使用PDO
(update
中的insert
)吗?
目前,我的代码看起来像这样,
public function update_username(){
$q = "UPDATE usertable SET username = '$user_name' WHERE id = '$user_id' LIMIT 1";
$r = $db->query($q);
if($r){
$message = "Updated successfully";
return $message;
}else{
return false;
}
}
我应该把它改成这样吗?
public function update_username(){
$q = "UPDATE usertable SET username = '$user_name' WHERE id = '$user_id' LIMIT 1";
$r = $db->query($q);
if($r){
$num = $r->rowCount();
if($num == 1){
$message = "Updated successfully";
return $message;
}else{
$message = "An error occurred";
return $message;
}
}else{
return false;
}
}
正常情况下,查询没有任何错误,所以我不应该担心它太多,但是哪一个更好的编码习惯?或者你是否建议别的?
提前非常感谢!
答案 0 :(得分:2)
实际上这两个代码做了不同的事情。
如果查询成功执行,第一个将打印“更新成功”。但是也可以在不影响任何行的情况下成功执行查询,即您的WHERE
statamenet不匹配。如果没有行受到影响,第二个代码将不会打印“更新成功”。
当然,如果您确定您的WHERE
语句必须匹配,您可以使用这两个代码而没有任何区别,使用第二个代码可以帮助您发现任何潜在的错误,即它不会匹配,所以出了问题(可能是id与你预期的不同)。
通常,要回答您的问题,只有在您想知道受影响的行数时才需要mysql_num_rows
。使用它并不是强制性的。
所以,这取决于你想要什么。两者都很好,但它们是不同的。
答案 1 :(得分:1)
如果您100%确定变量是由您而不是其他人创建的,那么您可以这样做,但您可以将代码最小化:
public function update_username(){
$q = "UPDATE usertable SET username = '$user_name' WHERE id = '$user_id'";
if($db->query($q)){
return "Updated successfully";
}
return false;
}
答案 2 :(得分:1)
首先,因为查询成功执行,并不一定意味着任何事情都已更新。因此,如果您需要区分查询有效性或更新更改之间的差异,那么是的,rowCount将是一个很好的做法。
其次,在分配变量(SQL注入等)时,准备好的语句更明智。
public function update_username(){
$q = "UPDATE usertable SET username = :user_name WHERE id = :user_id LIMIT 1";
$r = $db->prepare($q);
$r->bindValue(':user_name', $user_name);
$r->bindValue(':user_id', $user_id);
if($r->execute()){
$message = "Updated successfully: updated ".$r->rowCount();
return $message;
}else{
return false;
}
}
为了避免代码重复,也许您应该考虑避免为查询编写相同的执行代码,并将其移动到为您完成所有操作的方法/函数,例如
public function validateStmt($r) {
// validate query
if($r->execute()) {
// check result set
if($r->rowCount() > 0) {
return $r;
}
else {
// if a result set IS expected, then you might consider to handle this as
// a warning or an error
}
}
else {
// query invalid
}
}
答案 3 :(得分:1)
根据具体情况,您必须选择应使用的部分。 mysql_num_rows()用于检查已执行查询的行数。因此,由您决定是否确实需要将mysql_num_rows()函数添加到您的代码中。