2016-11-05 16 views
4

次のPDOクエリがありますが、何らかの理由でON DUPLICATEが機能しません。PHP PDO MySQL重複キー複数の行と値の更新

スラッグはユニークキーです。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

$statement = $db->prepare("INSERT INTO plugins (name, slug, version, author, author_profile, rating, num_ratings, active_installs, downloaded, last_updated, added, download_link, banners_high, banners_low, icons_default, icons_2x, icons_1x) 
          VALUES (:name, :slug, :version, :author, :author_profile, :rating, :num_ratings, :active_installs, :downloaded, :last_updated, :added, :download_link, :banners_high, :banners_low, :icons_default, :icons_2x, :icons_1x) 
          ON DUPLICATE KEY UPDATE version = :version, rating = :rating, num_ratings = :num_ratings, active_installs = :active_installs, downloaded = :downloaded, last_updated = :last_updated, download_link = :download_link"); 

         foreach ($call_api->plugins as $keys) { 
           $statement->execute([ 
             'name' => $keys->name, 
             'slug' => $keys->slug, 
             'version' => $keys->version, 
             'author' => sanitize_text_field($keys->author), 
             'author_profile' => $keys->author_profile, 
             'rating' => $keys->rating, 
             'num_ratings' => $keys->num_ratings, 
             'active_installs' => $keys->active_installs, 
             'downloaded' => $keys->downloaded, 
             'last_updated' => $keys->last_updated, 
             'added' => $keys->added, 
             'download_link' => $keys->download_link, 
             'banners_high' => $keys->banners['high'], 
             'banners_low' => $keys->banners['low'], 
             'icons_default' => $keys->icons['default'], 
             'icons_2x' => $keys->icons['2x'], 
             'icons_1x' => $keys->icons['1x'] 
           ]); 
         } 

私は、エラーを受信して​​います:

致命的なエラー:キャッチされないPDOException:SQLSTATE [HY093]:無効なパラメータ番号

+1

を試してみました:クエリのプレースホルダが配列の代入と一致しません。また、設定によっては、PDOは、1の重複利用はできません: - :version_selectと:プレースホルダの割り当てつまり、あなたは何をする必要があるだろうversion_updateや配列に二回割り当てます。それを試してください。 – junkfoodjunkie

+0

一致しない割り当てについて:私はどのように私は場合、私はすべての割り当てが一致しなければならなかったということだろう、いくつかの値が重複キーで更新したいので、これはありますか? 重複が受理されなければならないので、私は、設定され、以下の属性があります。 $ DB->のsetAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTIONを)。 $ db-> setAttribute(PDO :: ATTR_EMULATE_PREPARES、false); –

+0

[OK]を、重複した命名は確かに問題を解決しました! –

答えて

3

の量この

$statement = $db->prepare("INSERT INTO plugins (name, slug, version, author, author_profile, rating, num_ratings, active_installs, downloaded, last_updated, added, download_link, banners_high, banners_low, icons_default, icons_2x, icons_1x) 
         VALUES (:name, :slug, :version, :author, :author_profile, :rating, :num_ratings, :active_installs, :downloaded, :last_updated, :added, :download_link, :banners_high, :banners_low, :icons_default, :icons_2x, :icons_1x) 
         ON DUPLICATE KEY UPDATE version = :versionOne, rating = :ratingOne, num_ratings = :num_ratingsOne, active_installs = :active_installsOne, downloaded = :downloadedOne, last_updated = :last_updatedOne, download_link = :download_linkOne"); 

        foreach ($call_api->plugins as $keys) { 
          $statement->execute([ 
            'name' => $keys->name, 
            'slug' => $keys->slug, 
            'version' => $keys->version, 
            'author' => sanitize_text_field($keys->author), 
            'author_profile' => $keys->author_profile, 
            'rating' => $keys->rating, 
            'num_ratings' => $keys->num_ratings, 
            'active_installs' => $keys->active_installs, 
            'downloaded' => $keys->downloaded, 
            'last_updated' => $keys->last_updated, 
            'added' => $keys->added, 
            'download_link' => $keys->download_link, 
            'banners_high' => $keys->banners['high'], 
            'banners_low' => $keys->banners['low'], 
            'icons_default' => $keys->icons['default'], 
            'icons_2x' => $keys->icons['2x'], 
            'icons_1x' => $keys->icons['1x'], 

            'versionOne' => $keys->version, 
            'ratingOne' => $keys->rating, 
            'num_ratingsOne' => $keys->num_ratings, 
            'active_installsOne' => $keys->active_installs, 
            'downloadedOne' => $keys->downloaded, 
            'last_updatedOne' => $keys->last_updated, 
            'download_linkOne' => $keys->download_link 

          ]); 
        } 
関連する問題