2010-08-27 130 views
3

我正在尝试这个(并且在用户发送之前处理所有PoST var,没有SQL注入担心):PHP + PDO:如果param为空,则绑定null

$stmt = $con->prepare($sql); 
$stmt->bindParam(":1", $this->getPes_cdpessoa()); 
$stmt->bindParam(":2", $this->getPdf_nupessoa_def()); 

当任何这些变量为NULL时,PDO会哭并且不要让我的语句执行,在我的桌子上,我允许这些字段是空的。

有没有办法检查值是否为空,pdo只是将NULL绑定到那时(我的意思是,如果(空($ _ POST ['blablabla')...)每个单一参数的智能方式?

回答

5

尝试:

$stmt = $con->prepare($sql); 
$stmt->bindParam(':1', $this->getPes_cdpessoa(), PDO::PARAM_NULL); 
$stmt->bindParam(":2", $this->getPdf_nupessoa_def(), PDO::PARAM_NULL); 

此外,见:

+0

不行的,还是哭约零日期= \ – alex 2010-08-27 18:58:09

2

bindParam需要一个实际变量传递给它,因为它创建了一个引用。所以,当你的函数返回null时,bindParam并没有真正有效的东西。

您需要改用bindValue。请注意,bindValue将立即使用您传递给它的任何值,其中bindParam等待语句执行以实际检索要使用的值。

+1

如果我使用bindValue,则params的所有安全都没有了。我想要做的只是允许空值。 – alex 2010-08-27 18:59:04

+4

'bindValue'仍然给你提供与'bindParam'相同的prepare-statement-and-placeholder优点。主要区别在于实际评估值的时间,以及无法像使用'bindParam'那样获取数据库输出的时间。 – 2010-08-27 20:19:13

0

替代语法的工作原理:

$stmt = $con->prepare($sql); 
$stmt->execute(array($this->getPes_cdpessoa(), $this->getPdf_nupessoa_def()));