Я пытаюсь вставить несколько строк, используя транзакционное связывание через PHP PDO. Ниже мой код.
$arrkeys = array_keys($this->postItem); $itemqry = "INSERT INTO test_item (itemdate, flditmname, fieldtype, subscribe, id, year) VALUES (:itemdate, :flditmname, :fieldtype, :subscribe, :id, :year);" // dynamically generated $itmstmt = $dbcon->prepare($itemqry); for ($i=0; $i<$cnt; $i++){ foreach ($arrkeys as $key){ $val = $this->postItem[substr($key,1)][$i]; $itmstmt->bindParam($key, $val); } try { $itmstmt->execute(); } catch (PDOException $e){ echo $e->getMessage(); } }
Я проверил, что значения заполняются правильно (для привязки) следующим образом:
echo $key."=".$val."<br>"; //echoed just before the bind. :itemdate=2012-07-02 15:09:04 :flditmname=dccd :fieldtype=2 :subscribe=X :id=12345 :year=2012 :itemdate=2012-07-12 15:09:19 :flditmname=lkpok :fieldtype=3 :subscribe=X :id=12345 :year=2012
Однако после вставки в мою таблицу db все поля всех строк принимают значение «2012» (значение последнего поля).
Я не понимаю, почему это происходит. Может ли кто-нибудь помочь мне отслеживать проблему? Спасибо вам большое за ваше время.
Вы используете неправильный метод:
$itmstmt->bindParam($key, $val);
Должно быть:
$itmstmt->bindValue($key, $val);
bindValue
привязывает значение к параметру, тогда как bindParam
связывает параметр с указанным именем переменной