PDO执行INSERT语句出现Array to string conversion错误,如何解决?
问题原因
你调用execute()时传入了[$data],而$data本身是一个关联数组['first_name' => 'ben'],这相当于把整个数组作为单个占位符的参数传递。PDO尝试将数组转换为字符串匹配SQL中的占位符,于是触发Array to string conversion错误,数据库最终存储的是数组转字符串后的Array值。
解决方法
有两种可行的修复方式:
方式1:传递单个字段值
因为你的SQL只有一个占位符?,直接传入$data里的first_name值即可:
<?php $data = ['first_name' => 'ben'] ?> <?php $sql = "INSERT INTO names (first_name) values (?);" ?> <?php $statement = $pdo->prepare($sql); ?> <?php $statement->execute([$data['first_name']]); ?>
方式2:使用命名占位符(更适合多字段场景)
把SQL中的匿名占位符?改成命名占位符:first_name,然后直接传递整个$data数组给execute():
<?php $data = ['first_name' => 'ben'] ?> <?php $sql = "INSERT INTO names (first_name) values (:first_name);" ?> <?php $statement = $pdo->prepare($sql); ?> <?php $statement->execute($data); ?>
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

