PHP PDO执行数组引号


php pdo execute array quotations

下面的预处理语句不会插入到数据库中。

$sid =1;
$sid2 = $GET['sid2']; //empty
$position = 0;
$name = "John";
$new = $connectdb->prepare("INSERT INTO `table1` VALUES ('',:sid,:sid2,:position,:name)");
                $new->execute(array(':sid'=>$sid,':sid2'=>$sid2,':position'=>$position,':name'=>$name));

当我添加引号以执行数组值时,插入有效。

$new->execute(array(':sid'=>"$sid",':sid2'=>"$sid2",':position'=>"$position",':name'=>"$name"));

我想知道的是,通过添加引号,这会影响PDO的消毒吗?

您情况的唯一区别$sid2"$sid2" .

如果$sid2是一个字符串,那么$sid2"$sid2"相同,但是当$sid2 null时,事情就改变了。如果$sid2 null,则"$sid2"将为空字符串""

如果 sid2 列具有NOT NULL约束,则无法插入 null 值,但可以插入空字符串。

Myabe 你应该尝试:

$new->execute(
 array(
  ':sid'=>$connectdb->quote($sid),
  ':sid2'=>$connectdb->quote($sid2),
  ':position'=>$connectdb->quote($position),
  ':name'=>$connectdb->quote($name),
 )
);