【发布时间】:2014-03-20 21:06:47
【问题描述】:
我最近从 MYSQL*“升级”到 PDO,我有几个相关的问题:
1/ 我在网页上有一个提交大量数据的表单。与其有 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.唯一的缺点是您必须编写大量代码。 2.它是安全的。 3. 代码量可以大幅度减少,从answer to the very recent question可以看出