拥有以下代码
<?php
$age = get_age(); // a generated or random unsigned integer
$db->prepare("SELECT * FROM Customers WHERE name = :name AND age = :age");
$db->bindValue('name', $_POST['name']);
$db->bindValue('age', $age, PDO::PARAM_INT);
$db->execute();
我是否应该绑定'age',即使它不是来自用户(即外部)?
如果我有一个固定的年龄或者某种方式由我产生,我应该这样做吗?
<?php
$age = get_age(); // <- Of course I made sure this is an unsigned integer
$db->prepare("SELECT * FROM Customers WHERE name = :name AND age = $age");
$db->bindValue('name', $_POST['name']);
$db->execute();
每个人都有利弊吗,还是只是个人偏好?
答案 0 :(得分:4)
我应该绑定&#34;内部&#34;在PDO中准备查询时的值?
是
你应该理解一个愚蠢的人为例子和一个成熟的现实生活代码在其生命周期中的区别。
如果您想学习如何编写成熟代码,请考虑以下事项:
答案 1 :(得分:1)
是的,由于sql语句中的用法参数,你需要在你的上下文中绑定(参见:http://php.net/manual/fr/pdostatement.bindvalue.php)。
或者,您可以这样做:
<?php
$age = get_age(); // <- Of course I made sure this is an unsigned integer
$sth= $db->prepare("SELECT * FROM Customers WHERE name = ? AND age = ?");
$values = array("john", $age);
$sth->execute($values);
答案 2 :(得分:0)
在这种情况下,这只是个人偏好。我认为当这是一个大查询时,这对理解查询更好。但是,如果有一天有人更改了函数get_age()以便用户检索数据,那么这可能很危险。