为什么PDO中的INSERT INTO过于复杂?

时间:2013-04-21 19:34:49

标签: php mysql pdo

所以我必须将所有mysql_命令更改为PDO,因为它们是正式折旧的,PDO是最普遍的。 INSERT为何如此复杂,这有什么好处?

例如,在我的旧代码中,我这样做:

mysql_connect("$host", "$username", "$db_password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("INSERT INTO $tbl_name(this, that, him, her) VALUES('$this', '$that', '$him', '$her')")or die(mysql_error()); 

使用PDO

$conn = new PDO('mysql:host=HST_NAME;dbname=DB_NAME;charset=utf8', 'USER', 'PASSWORD');
$sql = "INSERT INTO books (this, that, him, her) VALUES (:this,:that,:him,:her)";
$q = $conn->prepare($sql);
$q->execute(array(':this'=>$this,
                  ':that'=>$that,
                  ':him'=>$him,
                  ':her'=>$her ));

当我必须立即输入大量数据时,PDO会变得庞大。这有什么好处?

寻找为什么要做回答,而不是做什么

2 个答案:

答案 0 :(得分:3)

因为你的mysql_query 格式不正确 如果您需要正确格式化,则需要与PDO相同的代码量

另外,由于某种原因,您选择“长”PDO语法。虽然代码可能是

$sql = "INSERT INTO books (this, that, him, her) VALUES (?,?,?,?)";
$q = $conn->prepare($sql);
$q->execute(array($this,$that,$him,$her));

尽管如此,对于其中任何一个,您都可以使用some sort of automation

要回答已修改的问题Why one should use prepared statements

答案 1 :(得分:0)

你应该直接在SQL语句中使用变量;这会导致各种安全漏洞。

正如您所说,mysql_函数已被弃用。我知道如果你长时间使用mysql_函数,你可能不愿意转向PDO,但是有很多原因可以解释为什么PDO比旧mysql_函数更好:

  • 它可以防止SQL注入漏洞开箱即用
  • 它比mysql_函数
  • 更快
  • 它还具有支持MySQL以外的数据库引擎
  • 的优点

PDO还会将数据库查询与参数分开。请考虑以下事项:

$sql = "INSERT INTO users (first_name, last_name, email)
        VALUES (:first_name, :last_name, :email)";

$smt->prepare($sql);
$smt->bindParam(':first_name', $first_name);
$smt->bindParam(':last_name', $last_name);
$smt->bindParam(':email', $email);
$smt->execute();

或者不那么“臃肿”的语法:

$sql = "INSERT INTO users (first_name, last_name, email)
        VALUES (:first_name, :last_name, :email)";

$smt->prepare($sql);
$smt->execute(array(
    ':first_name' => $first_name,
    ':last_name' => $last_name,
    ':email' => $email
));

如您所见,参数与语句本身分开。它比在你的陈述中插入变量更清晰,这看起来很难看,正如我所说,会导致注入漏洞。