1

以下准备好的语句不会插入数据库。

$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 的消毒吗?

4

2 回答 2

2

在您的情况下,唯一的区别$sid2是and "$sid2"

如果$sid2是字符串,则$sid2与 相同"$sid2",但何时$sid2null,则情况发生了变化。如果$sid2null,那么"$sid2"将是空字符串""

如果您的列sid2NOT NULL约束,那么您将无法插入空值,但您可以插入空字符串。

于 2012-07-06T05:59:35.907 回答
0

您应该尝试:

$new->execute(
 array(
  ':sid'=>$connectdb->quote($sid),
  ':sid2'=>$connectdb->quote($sid2),
  ':position'=>$connectdb->quote($position),
  ':name'=>$connectdb->quote($name),
 )
);
于 2012-07-06T05:43:36.523 回答