[英]update SQL table with multiple arrays using PDO
我想使用帶有PDO
PHP
更新SQL
表。 但是我不斷收到以下錯誤
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\core\functions\update_projects.php on line 31
我只是不知道我要去哪里錯了。
$j = 1;
$chunk_count = count($update)/7;
$backwards = array_reverse($update);
$chunks = array_chunk($backwards, 7);
var_dump($chunks[1]);
try {
for($i = 0; $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());
}
如果我var_dump($chunks[1])
我看到以下值
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" }
那么我的代碼中的問題在哪里呢? 任何幫助表示贊賞
是的,SQL參數從1開始編號(我不知道為什么答案的所有者刪除了它)。
參數編號是在SQL / CLI標准中定義的,該標准可以追溯到1980年代,之后才發明了零號。 ;-)
至於為什么您的代碼不更新,我希望確保id值位於您期望的位置。 反轉並分塊數組后,如果id值未在正確的位置結束,則它可能會嘗試更新行,但不匹配任何行。
這是編碼此例程的另一種方法:
$backwards = array_reverse($update);
$chunks = array_chunk($backwards, 7);
var_dump($chunks[1]);
try {
$update_project = $db->prepare('
UPDATE projects
SET comments = ?,
contact = ?,
est_end = ?,
est_start = ?,
apm = ?,
pm = ?
WHERE id = ?
');
$n = 0;
foreach ($chunks as $chunk) {
$update_project->execute($chunk);
$n += $update_project->rowCount();
}
echo 'Projects Updated, affected $n rows';
} catch(PDOException $e) {
die($e->getMessage());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.