【发布时间】:2014-01-01 18:31:29
【问题描述】:
我尝试为 SQL/PDO 插入查询创建一个函数:
function InsertQuery ($table,$cols,$values) {
global $pdo_conn;
foreach($values as $values2) {
$values2 = $values2;
}
$stmt='INSERT into $table (';
foreach($cols as $cols2) {
$stmt.=" ".$cols2.", ";
}
$stmt.=" ) VALUES ( ";
foreach($cols as $cols2) {
$stmt.=" :".$cols2." ";
}
$stmt.=" ) ";
$stmt2 = $pdo_conn->prepare($stmt);
foreach($cols as $cols2) {
$stmt2->bindParam(':$cols2', $cols2);
}
}
但我得到了错误:
可捕获的致命错误:第 30 行的 /home/integra/public_html/admin/includes/functions.php 中的 PDOStatement 类的对象无法转换为字符串
请耐心等待,因为我是 PDO 的新手并且刚刚习惯使用 MySQL
我把准备好的语句放错了还是我的 foreach 循环?
我认为该声明应如下所示:
$stmt2 = $pdo_conn->prepare('INSERT into $table (col1) values (:val1)');
$stmt2->bindParam(':$val1', $val);
这是我调用函数的方式:
$col=array('col1');
$val=array('val1');
InsertQuery ("table1",$col,$val);
更新:
好的,这是我的新代码:
global $pdo_conn;
foreach($values as $values2) {
$values2 = $values2;
}
$stmt='INSERT into '.$table.' (';
foreach($cols as $cols2) {
$stmt.=" ".implode(",", $cols2)." ";
}
$stmt.=" ) VALUES ( ";
foreach($cols as $cols2) {
$stmt.=" :".implode(",", $cols2)." ";
}
$stmt.=" ) ";
$stmt2 = $pdo_conn->prepare($stmt);
foreach($cols as $cols2) {
$stmt2->bindParam(':$cols2', $cols2);
}
但我现在得到关于内爆的错误:
警告:implode() [function.implode]:第 18 行 /home/integra/public_html/admin/includes/functions.php 中传递的参数无效
警告:implode() [function.implode]:第 22 行 /home/integra/public_html/admin/includes/functions.php 中传递的参数无效
我认为是因为只有一列和一个值,所以没有什么可以内爆的
【问题讨论】:
-
阅读错误信息。该错误与 PDO 无关。它只是告诉您
foreach()的论点是错误的。$values和$cols是什么?根据错误消息,它们似乎不是数组。 -
实际上,我认为
:$cols2是在那里,但是 使用 双引号 字符串而不是单引号,这样$cols2插值并添加:。 -
你为什么还要做一个 foreach 循环来设置 $values2 等于它自己??
-
谨慎引用。任何您希望在带引号的字符串中扩展变量的地方,都需要用双引号,而不是单引号。例如
$stmt2->bindParam(":$cols2", $cols2); -
该函数将用于许多插入查询,因此某些查询可能有 2 列要插入,而其他查询可能有更多