php pdo数组获取数组到字符串的转换错误

zbsbpyhn  于 2023-02-15  发布在  PHP
关注(0)|答案(1)|浏览(122)

当我运行这段代码时,它应该把ben存储在数据库中,但是,它在first_name列中显示了Array,并给出了字符串转换错误,我该如何消除这个错误呢?

<?php $data = ['first_name' => 'ben'] ?>
<?php $sql = "INSERT INTO names (first_name) values (?);" ?>

<?php $statement = $pdo->prepare($sql); ?>
<?php $statement->execute([$data]); ?>
iszxjhcz

iszxjhcz1#

PDO有两种绑定参数的方法,第一种是位置绑定,在这个例子中,你传递给execute()的数组应该是一个 indexed 数组,其值的顺序和你希望它们绑定到问号的顺序相同:

$sql = "INSERT INTO table (col1, col2) values (?, ?)";
$data = ['value for col1', 'value for col2'];

注意,值 * 必须 * 与它们的使用顺序相同:

$data = ['value for col2', 'value for col1']; // This won't work, wrong order!

另一种(在我看来,上级的)方法是使用命名参数。这里,你需要使用一个 associative 数组,它的键与你的参数占位符同名。

$sql = "INSERT INTO table (col1, col2) values (:col1, :col2)";
$data = ['col1' => 'value for col1', 'col2' => 'value for col2'];

现在,它们的顺序无关紧要,因为它们是由数组名而不是位置来键控的:

$data = ['col2' => 'value for col2', 'col1' => 'value for col1']; // Still good!

您的问题(除了@Sammitch指出的额外数组 Package 之外)是您以一种不兼容的方式将这两种技术混合在一起--您使用的是位置参数,但提供了一个关联数组。因此,在您的情况下,您要么需要使用位置参数,要么需要使用索引数组:

$data = ['ben'];
$sql = "INSERT INTO names (first_name) values (?);";
$statement = $pdo->prepare($sql);
$statement->execute($data);

或命名参数和关联数组:

$data = ['first_name' => 'ben'];
$sql = "INSERT INTO names (first_name) values (:first_name);";
$statement = $pdo->prepare($sql);
$statement->execute($data);

相关问题