php pdo绑定参数不起作用

时间:2012-03-05 19:33:46

标签: mysql pdo

我正在使用以下php pdo代码将数据插入到mysql数据库中,插入成功,但是,更新后的数据库将字符串文字':a',':b'分别显示为字段中的值。怎么了?

  
$data = array(
  array('a' => 'John', 'b' => 'OK'),

);
    $st=$dbh->prepare("insert into mytable (a, b) values(':a', ':b')");
    $st->execute($data) or print_r($st->errorInfo());

3 个答案:

答案 0 :(得分:2)

从占位符中删除引号。否则,它们将被视为字符串文字并直接插入。

$st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");

删除阵列上的嵌套:

// $data is an associative array, it should not contain another array!
$data = array('a' => 'John', 'b' => 'OK');

为了保持一致,我更喜欢在占位符数组键上使用:

$data = array(':a' => 'John', ':b' => 'OK');    

答案 1 :(得分:1)

你需要在sql和参数中定义你的数组相同,你错过了“:”。您也不需要两个阵列,只需要一个。

$data = array(':a' => 'John', ':b' => 'OK');

查询也不需要引号,因为PDO已经知道它是一个参数

$st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");
$st->execute($data) or print_r($st->errorInfo());

答案 2 :(得分:0)

您正在执行带有命名占位符的预准备语句。因此,您需要从占位符中删除引号,否则将它们视为相应列的值并直接更新。

为了保持一致,我更喜欢在占位符数组键上使用:

$data = array(':a' => 'John', ':b' => 'OK'); 

$st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");

您还可以使用问号占位符执行预准备语句:

$data = array(
  array('John','OK'),

);
$st=$dbh->prepare("insert into mytable (a, b) values(?, ?)");
$st->execute($data) or print_r($st->errorInfo());