PDO准备了声明及其执行

时间:2014-03-20 21:06:47

标签: php pdo

我最近已升级'从MYSQL *到PDO,我有几个相关的问题:

1 /我在网页上有一个提交大量数据的表格。而不是有一个looong准备好的声明,其中可能包含50个项目,我想将它分成5个单独的声明:

//TODs
$stmt = $db->prepare("UPDATE first_page_data(tod_house, tod_bung, tod_flat, tod_barnc, tod_farm, tod_small, tod_build, tod_devland, tod_farmland) SET(?,?,?,?,?,?,?,?,?) WHERE email_address=?");

$stmt->bindValue(1, $_POST['tod_house'], PDO::PARAM_STR);
$stmt->bindValue(2, $_POST['tod_bung'], PDO::PARAM_STR);
$stmt->bindValue(3, $_POST['tod_flat'], PDO::PARAM_STR);
$stmt->bindValue(4, $_POST['tod_barnc'], PDO::PARAM_INT);
$stmt->bindValue(5, $_POST['tod_farm'], PDO::PARAM_STR);
$stmt->bindValue(6, $_POST['tod_small'], PDO::PARAM_STR);
$stmt->bindValue(7, $_POST['tod_build'], PDO::PARAM_STR);
$stmt->bindValue(8, $_POST['tod_devland'], PDO::PARAM_STR);
$stmt->bindValue(9, $_POST['tod_farmland'], PDO::PARAM_STR);
$stmt->bindValue(10, $_SESSION['buyer_email']);
$stmt->execute();

这是5个街区中的第一个。如果我没有拆分它,这个陈述将是50项长。我的问题是,分裂它会有任何明显的不利影响吗?速度,服务器上的压力等......因为数据库有5个较小的更新,而不是1个大的更新。

2 /我的第二个问题很简单 - 上面的代码是否安全'?我见过人们把$ _POST值放入一个变量(主要是因为MYSQL)然后进入语句。我已经读过,使用PDO可以防止任何注入,因此POST值可以直接放入bindValue,但我不完全确定!

1 个答案:

答案 0 :(得分:1)

是的,它是安全的(PDO :: prepare负责这一点),一个大的声明比一系列较小的声明更有效。但是您可以编写代码脚本,以减少阅读和编辑的痛苦。意见建议:

  1. 将查询放在一个字符串中,使其更加垂直,每个参数一行。 Heredoc语法非常适用于此并避免连接。

  2. 使用:查询中的任何内容而不是编号值,只是为了清晰和便携。

  3. 您可以构建一个数组然后将其全部传递给execute();而不是重复调用bindValue;数组是PHP可以做的最简单的事情,并且应该比重复调用bindValue更少开销,尽管真正的差异可能是微不足道的。

    $arrParams[] = array(':tod_house' => $_POST["tod_house"];

    $stmt->execute($arrParams);