所以我对这个问题很困惑。我正在向这个PHP
文件发送一个帖子,AJAX
它使用我的数组,反转它,分块,然后用它来绑定值。每个块都包含一行要更新的信息,因此 for 循环的每次迭代都会更新一行。
我第一次尝试这个时,我使用了以下代码。
if(isset($_POST['saveEdits'])) {
$i = 0;
$j = 1;
$update = array();
$update = $_POST['saveEdits'];
$chunk_count = count($update)/7;
$backwards = array_reverse($update);
$chunks = array_chunk($backwards, 7);
try {
for($i; $i < $chunk_count; $i++ ) {
$update_project = $db->prepare('
UPDATE projects
SET comments = ?,
contact = ?,
est_end = ?,
est_start = ?,
apm = ?,
pm = ?
WHERE id = ?
');
foreach ($chunks[$i] as $field => $val) {
$update_project->bindValue($j++, $val, PDO::PARAM_STR);
}
$update_project->execute();
}
echo 'Projects Updated';
} catch(PDOException $e) {
die($e->getMessage());
}
} else {
echo 'could not update projects table';
}
我每次都会收到以下错误
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\core\functions\update_projects.php on line 31
所以有人建议我改变
$i = 0;
至
$i = 1;
这以某种方式起作用。这让我可以一次性插入数据,但不会插入所有数据。这完全有效的事实让我感到莫名其妙。$i 是我的循环索引和块索引的持有者。它需要从 0 开始 - 无论如何。我不明白从 1 开始有什么帮助。$j 是参数 binder 的持有者,它应该从 1 开始。
一些额外的信息。如果我 var_dump(chunks[0]) 和 var_dump(chunks[1]) 我看到以下
array(7) { [0]=> string(13) "more comments" [1]=> string(9) "jimmy doe" [2]=> string(6) "1-1-14" [3]=> string(7) "12-1-13" [4]=> string(9) "janey doe" [5]=> string(9) "jonny doe" [6]=> string(2) "17" }
array(7) { [0]=> string(13) "some comments" [1]=> string(7) "jim doe" [2]=> string(6) "1-1-14" [3]=> string(7) "12-1-13" [4]=> string(8) "jane doe" [5]=> string(7) "jon doe" [6]=> string(2) "16" }
所以复习。$i = 0
我得到了最上面的错误,$i = 1
我插入一行就结束了。有人可以告诉我这里发生了什么吗?任何帮助表示赞赏