我正在使用以下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());
答案 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());