Moin.
Ich versuchs wie immer kurz zu halten:
- nutze prepared statements (PDO)
- will mehrere einträge in die tabelle schicken via simplen INSERT INTO db.table (col,col2) VALUES (1,2), (2,2) usw
- nutze zwecks PDO platzhalter für die daten (platzhalter = 'a' ... platzhalter++)
- `id` ist primary key
Alles funktioniert, bis auf ON DUPLICATE KEY UPDATE.
Um es zu verdeutlichen hier die query (gekürtzt):
(SQLSTATE: HY093)
E_WARNING: PDOStatement::execute():
SQLSTATE[HY093]: Invalid parameter number:
number of bound variables does not match number of tokens
in ...
-- Query:
INSERT INTO cms_vertex.movies_mtbl
(`id`,`name`,`date_added`,`date_deleted`,`description`,`lang_key`,`quality_key`,`extension`,`size`,`path`)
VALUES
(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j),
(:k,:l,:m,:n,:o,:p,:q,:r,:s,:t),
... ...
(:agm,:agn,:ago,:agp,:agq,:agr,:ags,:agt,:agu,:agv),
(:agw,:agx,:agy,:agz,:aha,:ahb,:ahc,:ahd,:ahe,:ahf),
(:ahg,:ahh,:ahi,:ahj,:ahk,:ahl,:ahm,:ahn,:aho,:ahp)
ON DUPLICATE KEY UPDATE `name` = :name
;
Alles anzeigen
Und hier sieht man schon das Problem: ON DUPLICATE KEY UPDATE `name` = :name
Da es mehrere Einträge sind kann ich kein `name` = :name angeben.
Hab auch über INSERT IGNORE nachgedacht, aber das wäre wohl der falsche Weg.
Auch eine "fake"-column wäre möglich, die dann eben immer auf NOW gesetzt wird, aber das ist auch nicht pro.
hat jemand ne Idee wie man das lösen könnte?