如何使用PDO更新行?

时间:2016-03-22 11:12:57

标签: php mysql sql database pdo

如何将此代码转换为适用于PDO的代码?

if($_POST['name']=='home_title'){
$id=$_POST['pk'];
$home_title=$_POST['value'];
$result=mysql_query("SELECT COUNT(*) as count FROM sw_configuration WHERE id=$id") or die(mysql_error());
$count= mysql_fetch_row($result);
if($count[0]==0){
   mysql_query("INSERT INTO sw_configuration(id,home_title) VALUES('".$id."','".$home_title."')") or die(mysql_error()); 
}else{
   mysql_query("UPDATE sw_configuration SET home_title='".$home_title."' WHERE id=$id") or die(mysql_error()); 
  }
}

1 个答案:

答案 0 :(得分:1)

简单地使用PDO 不够使您的脚本免受SQL注入攻击。您仍然需要确保用户提供的变量的全部正确quoted或更好,使用带有绑定参数的预准备语句,这是首选方法。如果不这样做,使用PDO和常规mysql_*函数之间在安全方面没有区别。以下是如何执行此操作的示例:

$stmt = $dbh->prepare("INSERT INTO sw_configuration(id,home_title) 
    VALUES(:id,:home_title)");
$stmt->bindValue(':id', $id);
$stmt->bindValue(':home_title', $home_title);
$stmt->execute();

或者如果您需要选择一个值:

$stmt = $dbh->prepare("SELECT COUNT(*)
    FROM sw_configuration WHERE id = :id");
$stmt->bindValue(':id', $id);
$stmt->execute();

$count = $stmt->fetchColumn();