如何以该方式使用PDO查询数组与bindValue?执行报错求助
问题分析与正确用法
我来帮你梳理下当前代码的问题,以及正确的使用方式:
核心问题所在
- 参数格式错误:你传递的
query_variables是一个字符串"bindValue(':title', '1')",但你的自定义函数vn_db_query_select仅当query_variables是数组类型时才会执行参数绑定逻辑。这直接导致SQL中的:title占位符没有被替换,执行时触发报错。 - 数组键名不匹配:就算改成数组,你原本的写法也和函数的处理逻辑不兼容——函数会自动给数组键名添加
:来匹配SQL占位符,所以数组键不需要带冒号。
正确的代码写法
首先修改你的查询数组,将query_variables调整为键值对数组(键为不带冒号的占位符名称,值为对应绑定内容):
$productadd_query_array = array( "query" => "INSERT INTO vn_product (title) VALUES (:title)", "query_variables" => array("title" => "1") ); $product_add = vn_db_query_select( $productadd_query_array );
函数逻辑补充说明
你的vn_db_query_select函数中,参数绑定的逻辑是这样的:
if ( is_array( $array["query_variables"] ) ) { foreach ($array["query_variables"] as $var_name => $var_value) { $userInfo->bindValue(":".$var_name, $var_value); } }
遍历数组时,会自动把键名$var_name拼接成:title,正好匹配你SQL里的:title占位符,所以数组里的键名不需要带冒号。
额外优化提示
由于你执行的是INSERT语句,这类写操作不会返回结果集,所以函数最后fetchAll()得到的$user会是空数组。如果需要判断插入是否成功,可以在函数里添加返回受影响行数的逻辑,比如:
// 替换原来的fetchAll和返回逻辑 $affectedRows = $userInfo->rowCount(); $pdo = null; return $affectedRows > 0; // 返回是否插入成功
内容的提问来源于stack exchange,提问作者user10704830
相关产品推荐
相关产品推荐

