首頁 > 資料庫 > mysql教程 > 為什麼我的多重插入查詢會傳回「無效參數號碼」?

為什麼我的多重插入查詢會傳回「無效參數號碼」?

Susan Sarandon
發布: 2024-12-13 18:14:10
原創
261 人瀏覽過

Why Does My Multiple Insert Query Return

錯誤:多次插入查詢中參數編號無效

嘗試在資料庫表中插入多筆記錄時,您可能會遇到「參數編號無效:參數未定義” 錯誤。當查詢中指定的參數數量與作為輸入提供的值的數量不符時,就會發生這種情況。

理解問題

在提供的程式碼片段中:

$matches = array('1');
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}

// Build query
$q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash");
$q->execute($matches);
登入後複製

目標是使用準備好的語句將 $matches 中的值插入雜湊表中。但是,由於 $values 數組中的佔位符參數 (?) 數量與 $matches 中的實際資料不對應而出現錯誤。

修正

要解決此問題,請確保以下:

  1. 初始化陣列:在循環之前始終初始化$values 陣列以避免預先存在的值。
  2. 確認資料計數:驗證 $values 中的元素數量是否等於 $matches 中的元素數量。如果沒有,請調整循環或新增條件檢查。
  3. 建立唯一索引:檢查雜湊是否有唯一索引。這可以防止重複條目並確保插入或更新每個提供的值。
  4. 使用參數化語句:採用準備好的語句來防止 SQL 注入和參數綁定問題。

範例

$matches = array('1');
$values = [];
$count = count($matches);

for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}

// Insert query with named parameters (:hash)
$sql = "INSERT INTO hashes (hash) VALUES (:hash) ON DUPLICATE KEY UPDATE hash = VALUES(:hash)";
$stmt = $dbh->prepare($sql);
$data = $stmt->execute([':hash' => $matches]);
登入後複製

以上是為什麼我的多重插入查詢會傳回「無效參數號碼」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板