我在开发期间做了一个简单的INSERT
,但我要回去并提供SQL保护和准备语句。我收到的错误是:
警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效: 绑定变量的数量与令牌的数量不匹配
以下是我在其他人的帮助下使用的代码。
// foreach to set up variables
foreach ($json as $text) {
$uoid = mysql_real_escape_string($uoid);
$filename = mysql_real_escape_string($uoid.".jpg");
$filedate = mysql_real_escape_string($datetime);
$imagedesc = mysql_real_escape_string($desc);
// array of values
$insert[] = array($uoid,$filename,$filedate,$imagedesc);
}
function placeholders($text, $count=0, $separator=","){
$result = array();
if($count > 0){
for($x=0; $x<$count; $x++){
$result[] = $text;
}
}
return implode($separator, $result);
}
foreach($insert as $d){
$question_marks[] = '(' . placeholders('?', sizeof($d)) . ')';
}
$pdo = new PDO('mysql:dbname=photo_gallery;host=127.0.0.1', 'myuser', 'mypass');
$pdo->beginTransaction();
$sql = "INSERT INTO wp_gallery (" . implode(',', array_values($insert) ) . ")
VALUES " . implode(',', $question_marks);
// reading output
echo $sql;
$stmt = $pdo->prepare($sql);
try {
$stmt->execute($insert[0]);
} catch (PDOException $e){
echo $e->getMessage();
}
$pdo->commit();
当我查看SQL输出时:
INSERT INTO wp_gallery (10219776,10219776.jpg,my image description,2012-08-01 15:36:29)
VALUES (?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?)
一切都与它的外观相匹配,但我仍然对如何解决这个问题感到困惑。有人可以指出我做错了吗?
答案 0 :(得分:0)
INSERT语句如下所示:
INSERT INTO name_of_the_table (name_of_column_1, name_of_column_2,...) VALUES
(value_of_column_1, value_of_column_2), (value_of_column_1, value_of_column_2);
如果按照定义的顺序设置所有列的值,则可以省略列的名称。
然而,您可以将值列在列名称和问号之间,其中值应该是。
答案 1 :(得分:0)
答案 2 :(得分:0)
您将值作为列名传递,并且您没有传递正确的参数来执行;
这样的事情会更正确;
// Replace the $insert buildup. Array of values, you don't want an array of arrays here.
$insert = array_merge($insert, array($uoid,$filename,$filedate,$imagedesc));
...
$column_names = array("column1", "column2", "column3", "column4");
$sql = "INSERT INTO wp_gallery (" . implode(',', $column_names ) . ")
VALUES " . implode(',', $question_marks);
$stmt->execute($insert);