Мы должны пройти $ batchdata , который представляет собой массив строк данных, каждая строка данных является ассоциативным массивом, который отображает имя столбца со значением столбца. Например: < /p>
[
[
//...
"282267X506X5569SQ04#0" => "some answher here"
//...
],
//...
]
< /code>
и это генерирует команду, которая выглядит так: < /p>
INSERT INTO `lime_survey_282267` (`282267X506X5530`,
`282267X506X5531`,
`282267X507X5534SQ001`,
`282267X507X5534SQ002`,
`282267X507X5534SQ003`,
`282267X507X5534SQ004`,
`282267X504X5513`,
`282267X504X5514`,
`282267X504X5515`,
`282267X504X5516`,
`282267X504X5517`,
`282267X504X5518SQ01`,
`282267X504X5518SQ02`,
`282267X504X5518SQ03`,
`282267X504X5518SQ04`,
`282267X504X5519SQ01`,
`282267X504X5519SQ02`,
`282267X504X5519SQ03`,
`282267X504X5519SQ04`,
`282267X504X5520SQ01`,
`282267X504X5520SQ02`,
`282267X504X5520SQ03`,
`282267X504X5520SQ04`,
`282267X505X5521`,
`282267X505X5522SQ01`,
`282267X505X5522SQ02`,
`282267X505X5522SQ03`,
`282267X505X5522SQ04`,
`282267X505X5523SQ001`,
`282267X505X5523SQ002`,
`282267X505X5523SQ003`,
`282267X505X5524SQ01`,
`282267X505X5524SQ02`,
`282267X505X5524SQ03`,
`282267X505X5524SQ04`,
`282267X506X5525`,
`282267X506X5526`,
`282267X506X5527`,
`282267X506X5528`,
`282267X506X5549`,
`282267X506X5529`,
`282267X506X5530other`,
`282267X506X5531comment`,
`282267X506X5535`,
`282267X506X5536`,
`282267X506X5542`,
`282267X506X5538SQ01`,
`282267X506X5538SQ02`,
`282267X506X5538SQ03`,
`282267X506X5538SQ04`,
`282267X506X5547SQ01`,
`282267X506X5547SQ02`,
`282267X506X5547SQ03`,
`282267X506X5547SQ04`,
`282267X506X5539SQ01`,
`282267X506X5539SQ02`,
`282267X506X5539SQ03`,
`282267X506X5539SQ04`,
`282267X506X5540SQ01`,
`282267X506X5540SQ02`,
`282267X506X5540SQ03`,
`282267X506X5540SQ04`,
`282267X506X5541SQ01`,
`282267X506X5541SQ02`,
`282267X506X5541SQ03`,
`282267X506X5541SQ04`,
`282267X506X5550SQ01`,
`282267X506X5550SQ02`,
`282267X506X5550SQ03`,
`282267X506X5550SQ04`,
`282267X506X5546SQ01#0`,
`282267X506X5546SQ01#1`,
`282267X506X5546SQ02#0`,
`282267X506X5546SQ02#1`,
`282267X506X5546SQ03#0`,
`282267X506X5546SQ03#1`,
`282267X506X5546SQ04#0`,
`282267X506X5546SQ04#1`,
`282267X506X5569SQ01#0`,
`282267X506X5569SQ01#1`,
`282267X506X5569SQ02#0`,
`282267X506X5569SQ02#1`,
`282267X506X5569SQ03#0`,
`282267X506X5569SQ03#1`,
`282267X506X5569SQ04#0`,
`282267X506X5569SQ04#1`,
`282267X507X5532SQ01`,
`282267X507X5532SQ02`,
`282267X507X5532SQ03`,
`282267X507X5532SQ04`,
`282267X507X5532other`,
`282267X507X5533SQ01`,
`282267X507X5533SQ02`,
`282267X507X5533SQ03`,
`282267X507X5533SQ04`,
`282267X507X5533SQ05`,
`282267X507X5534SQ001comment`,
`282267X507X5534SQ002comment`,
`282267X507X5534SQ003comment`,
`282267X507X5534SQ004comment`,
`282267X507X5552`,
`282267X507X5553`,
`282267X507X55371`,
`282267X507X55372`,
`282267X507X55373`,
`282267X507X55374`,
`282267X507X55511`,
`282267X507X55512`,
`282267X507X55513`,
`282267X507X55514`,
`282267X508X5554`,
`282267X508X5555`,
`282267X508X5556`,
`282267X508X5557`,
`282267X508X5566`,
`282267X508X5567`,
`282267X508X5568`,
`282267X508X5558SH101`,
`282267X508X5558SH102`,
`282267X508X5559SQ201`,
`282267X508X5559SQ202`,
`282267X508X5562`,
`282267X508X5560`,
`282267X508X5561`,
`282267X509X5563SQ01`,
`282267X509X5563SQ02`,
`282267X509X5563SQ03`,
`282267X509X5563SQ04`,
`282267X509X5564SQ01`,
`282267X509X5564SQ02`,
`282267X509X5564SQ03`,
`282267X509X5564SQ04`,
`282267X509X5565SQ01`,
`282267X509X5565SQ02`,
`282267X509X5565SQ03`,
`282267X509X5565SQ04`,
`startdate`,
`datestamp`,
`lastpage`,
`startlanguage`,
`seed`) V A L U E S ( : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 5 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 6 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 7 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 8 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 8 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 8 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 8 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 9 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 9 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 9 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 9 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 2 0 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 2 0 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 2 0 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 2 0 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 2 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 2 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 2 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 2 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 3 S Q 0 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 3 S Q 0 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 3 S Q 0 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 4 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 4 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 4 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 4 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 5 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 6 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 7 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 8 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 9 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 9 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 0 o t h e r _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 1 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 5 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 6 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 8 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 8 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 8 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 8 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 7 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 7 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 7 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 7 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 9 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 9 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 9 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 9 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 0 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 0 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 0 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 0 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 1 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 1 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 1 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 1 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 5 0 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 5 0 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 5 0 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 5 0 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 1 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 1 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 2 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 2 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 3 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 3 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 4 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 4 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 1 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 1 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 2 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 2 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 3 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 3 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 4 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 4 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 o t h e r _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 5 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 1 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 2 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 3 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 4 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 7 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 7 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 7 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 7 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 1 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 1 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 1 3 _ 0 , < b r / > : 2 8 2 2 6 7X507X55514_0,
:282267X508X5554_0,
:282267X508X5555_0,
:282267X508X5556_0,
:282267X508X5557_0,
:282267X508X5566_0,
:282267X508X5567_0,
:282267X508X5568_0,
:282267X508X5558SH101_0,
:282267X508X5558SH102_0,
:282267X508X5559SQ201_0,
:282267X508X5559SQ202_0,
:282267X508X5562_0,
:282267X508X5560_0,
:282267X508X5561_0,
:282267X509X5563SQ01_0,
:282267X509X5563SQ02_0,
:282267X509X5563SQ03_0,
:282267X509X5563SQ04_0,
:282267X509X5564SQ01_0,
:282267X509X5564SQ02_0,
:282267X509X5564SQ03_0,
:282267X509X5564SQ04_0,
:282267X509X5565SQ01_0,
:282267X509X5565SQ02_0,
:282267X509X5565SQ03_0,
:282267X509X5565SQ04_0,
:startdate_0,
:datestamp_0,
:lastpage_0,
:startlanguage_0,
:seed_0),
(:282267X506X5530_1,
:282267X506X5531_1,
:282267X507X5534SQ001_1,
:282267X507X5534SQ002_1,
:282267X507X5534SQ003_1,
:282267X507X5534SQ004_1,
:282267X504X5513_1,
:282267X504X5514_1,
:282267X504X5515_1,
:282267X504X5516_1,
:282267X504X5517_1,
:282267X504X5518SQ01_1,
:282267X504X5518SQ02_1,
:282267X504X5518SQ03_1,
:282267X504X5518SQ04_1,
:282267X504X5519SQ01_1,
:282267X504X5519SQ02_1,
:282267X504X5519SQ03_1,
:282267X504X5519SQ04_1,
:282267X504X5520SQ01_1,
:282267X504X5520SQ02_1,
:282267X504X5520SQ03_1,
:282267X504X5520SQ04_1,
:282267X505X5521_1,
:282267X505X5522SQ01_1,
:282267X505X5522SQ02_1,
:282267X505X5522SQ03_1,
:282267X505X5522SQ04_1,
:282267X505X5523SQ001_1,
:282267X505X5523SQ002_1,
:282267X505X5523SQ003_1,
:282267X505X5524SQ01_1,
:282267X505X5524SQ02_1,
:282267X505X5524SQ03_1,
:282267X505X5524SQ04_1,
:282267X506X5525_1,
:282267X506X5526_1,
:282267X506X5527_1,
:282267X506X5528_1,
:282267X506X5549_1,
:282267X506X5529_1,
:282267X506X5530other_1,
:282267X506X5531comment_1,
:282267X506X5535_1,
:282267X506X5536_1,
:282267X506X5542_1,
:282267X506X5538SQ01_1,
:282267X506X5538SQ02_1,
:282267X506X5538SQ03_1,
:282267X506X5538SQ04_1,
:282267X506X5547SQ01_1,
:282267X506X5547SQ02_1,
:282267X506X5547SQ03_1,
:282267X506X5547SQ04_1,
:282267X506X5539SQ01_1,
:282267X506X5539SQ02_1,
:282267X506X5539SQ03_1,
:282267X506X5539SQ04_1,
:282267X506X5540SQ01_1,
:282267X506X5540SQ02_1,
:282267X506X5540SQ03_1,
:282267X506X5540SQ04_1,
:282267X506X5541SQ01_1,
:282267X506X5541SQ02_1,
:282267X506X5541SQ03_1,
:282267X506X5541SQ04_1,
:282267X506X5550SQ01_1,
:282267X506X5550SQ02_1,
:282267X506X5550SQ03_1,
:282267X506X5550SQ04_1,
:282267X506X5546SQ01#0_1,
:282267X506X5546SQ01#1_1,
:282267X506X5546SQ02#0_1,
:282267X506X5546SQ02#1_1,
:282267X506X5546SQ03#0_1,
:282267X506X5546SQ03#1_1,
:282267X506X5546SQ04#0_1,
:282267X506X5546SQ04#1_1,
:282267X506X5569SQ01#0_1,
:282267X506X5569SQ01#1_1,
:282267X506X5569SQ02#0_1,
:282267X506X5569SQ02#1_1,
:282267X506X5569SQ03#0_1,
:282267X506X5569SQ03#1_1,
:282267X506X5569SQ04#0_1,
:282267X506X5569SQ04#1_1,
:282267X507X5532SQ01_1,
:282267X507X5532SQ02_1,
:282267X507X5532SQ03_1,
:282267X507X5532SQ04_1,
:282267X507X5532other_1,
:282267X507X5533SQ01_1,
:282267X507X5533SQ02_1,
:282267X507X5533SQ03_1,
:282267X507X5533SQ04_1,
:282267X507X5533SQ05_1,
:282267X507X5534SQ001comment_1,
:282267X507X5534SQ002comment_1,
:282267X507X5534SQ003comment_1,
:282267X507X5534SQ004comment_1,
:282267X507X5552_1,
:282267X507X5553_1,
:282267X507X55371_1,
:282267X507X55372_1,
:282267X507X55373_1,
:282267X507X55374_1,
:282267X507X55511_1,
:282267X507X55512_1,
:282267X507X55513_1,
:282267X507X55514_1,
:282267X508X5554_1,
:282267X508X5555_1,
:282267X508X5556_1,
:282267X508X5557_1,
:282267X508X5566_1,
:282267X508X5567_1,
:282267X508X5568_1,
:282267X508X5558SH101_1,
:282267X508X5558SH102_1,
:282267X508X5559SQ201_1,
:282267X508X5559SQ202_1,
:282267X508X5562_1,
:282267X508X5560_1,
:282267X508X5561_1,
:282267X509X5563SQ01_1,
:282267X509X5563SQ02_1,
:282267X509X5563SQ03_1,
:282267X509X5563SQ04_1,
:282267X509X5564SQ01_1,
:282267X509X5564SQ02_1,
:282267X509X5564SQ03_1,
:282267X509X5564SQ04_1,
:282267X509X5565SQ01_1,
:282267X509X5565SQ02_1,
:282267X509X5565SQ03_1,
:282267X509X5565SQ04_1,
:startdate_1,
:datestamp_1,
:lastpage_1,
:startlanguage_1,
:seed_1)
< /code>
, а затем заполнители получают некоторые значения из архивов. Я сделал некоторую отладку, и я могу с абсолютной уверенностью сказать, что виновником является то, что имена столбцов содержат хэштеги, и эти хэштеги не очень хорошо работают вместе с заполнителями (см. Допустимые персонажи PDO). Refactor Все ссылки на имена столбцов, которые имеют хэштеги. Если все остальное не удастся, я найду какую -то другую пакетную функциональность или внедрим свои собственные с нуля. Тем не менее, я колебаюсь, потому что необходимо поддерживать несколько RDBMS, таких как MySQL, PostgreSQL, SQL Server и т. Д. Внутренне это то, что выполняла функция: < /p>
/**
* Creates a multiple INSERT command.
* This method could be used to achieve better performance during insertion of the large
* amount of data into the database tables.
* @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string).
* @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value).
* If a key is not a valid column name, the corresponding value will be ignored.
* @return CDbCommand multiple insert command
* @since 1.1.14
*/
public function createMultipleInsertCommand($table,array $data)
{
return $this->composeMultipleInsertCommand($table,$data);
}
< /code>
и, конечно, функция, которую она вызывает: < /p>
/**
* Creates a multiple INSERT command.
* This method compose the SQL expression via given part templates, providing ability to adjust
* command for different SQL syntax.
* @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string).
* @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value).
* If a key is not a valid column name, the corresponding value will be ignored.
* @param array $templates templates for the SQL parts.
* @return CDbCommand multiple insert command
* @throws CDbException if $data is empty.
*/
protected function composeMultipleInsertCommand($table,array $data,array $templates=array())
{
if (empty($data))
throw new CDbException(Yii::t('yii','Can not generate multiple insert command with empty data set.'));
$templates=array_merge(
array(
'main'=>'INSERT INTO {{tableName}} ({{columnInsertNames}}) VALUES {{rowInsertValues}}',
'columnInsertValue'=>'{{value}}',
'columnInsertValueGlue'=>', ',
'rowInsertValue'=>'({{columnInsertValues}})',
'rowInsertValueGlue'=>', ',
'columnInsertNameGlue'=>', ',
),
$templates
);
$this->ensureTable($table);
$tableName=$table->rawName;
$params=array();
$columnInsertNames=array();
$rowInsertValues=array();
$columns=array();
foreach($data as $rowData)
{
foreach($rowData as $columnName=>$columnValue)
{
if(!in_array($columnName,$columns,true))
if($table->getColumn($columnName)!==null)
$columns[]=$columnName;
}
}
foreach($columns as $name)
$columnInsertNames[$name]=$this->getDbConnection()->quoteColumnName($name);
$columnInsertNamesSqlPart=implode($templates['columnInsertNameGlue'],$columnInsertNames);
foreach($data as $rowKey=>$rowData)
{
$columnInsertValues=array();
foreach($columns as $columnName)
{
$column=$table->getColumn($columnName);
$columnValue=array_key_exists($columnName,$rowData) ? $rowData[$columnName] : new CDbExpression('NULL');
if($columnValue instanceof CDbExpression)
{
$columnInsertValue=$columnValue->expression;
foreach($columnValue->params as $columnValueParamName=>$columnValueParam)
$params[$columnValueParamName]=$columnValueParam;
}
else
{
$columnInsertValue=':'.$columnName.'_'.$rowKey;
$params[':'.$columnName.'_'.$rowKey]=$column->typecast($columnValue);
}
$columnInsertValues[]=strtr($templates['columnInsertValue'],array(
'{{column}}'=>$columnInsertNames[$columnName],
'{{value}}'=>$columnInsertValue,
));
}
$rowInsertValues[]=strtr($templates['rowInsertValue'],array(
'{{tableName}}'=>$tableName,
'{{columnInsertNames}}'=>$columnInsertNamesSqlPart,
'{{columnInsertValues}}'=>implode($templates['columnInsertValueGlue'],$columnInsertValues)
));
}
$sql=strtr($templates['main'],array(
'{{tableName}}'=>$tableName,
'{{columnInsertNames}}'=>$columnInsertNamesSqlPart,
'{{rowInsertValues}}'=>implode($templates['rowInsertValueGlue'], $rowInsertValues),
));
$command=$this->getDbConnection()->createCommand($sql);
foreach($params as $name=>$value)
$command->bindValue($name,$value);
return $command;
}
Итак, насколько я знаю, мне нужно передать точное имя столбца, чтобы в INSERT предложение идентифицировало его должным образом. И в то же время я получаю < /p>
cdbcommand не удалось выполнить оператор SQL: sqlstate [hy093]: неверный номер параметра: параметр не был дефицит. Дело в том, что тот же ключ идентифицирует столбец и, следовательно, должен иметь # в его имени, и, как это ни парадоксально, заполнитель также генерируется из этого.
class LSCDbCommandBuilder extends CdbCommandBuilder {
/**
* Creates a multiple INSERT command.
* This method compose the SQL expression via given part templates, providing ability to adjust
* command for different SQL syntax.
* @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string).
* @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value).
* If a key is not a valid column name, the corresponding value will be ignored.
* @param array $templates templates for the SQL parts.
* @return CDbCommand multiple insert command
* @throws CDbException if $data is empty.
*/
protected function composeMultipleInsertCommand($table,array $data,array $templates=array())
{
if (empty($data))
throw new CDbException(Yii::t('yii','Can not generate multiple insert command with empty data set.'));
$templates=array_merge(
array(
'main'=>'INSERT INTO {{tableName}} ({{columnInsertNames}}) VALUES {{rowInsertValues}}',
'columnInsertValue'=>'{{value}}',
'columnInsertValueGlue'=>', ',
'rowInsertValue'=>'({{columnInsertValues}})',
'rowInsertValueGlue'=>', ',
'columnInsertNameGlue'=>', ',
),
$templates
);
$this->ensureTable($table);
$tableName=$table->rawName;
$params=array();
$columnInsertNames=array();
$rowInsertValues=array();
$columns=array();
foreach($data as $rowData)
{
foreach($rowData as $columnName=>$columnValue)
{
if(!in_array($columnName,$columns,true))
if($table->getColumn($columnName)!==null)
$columns[]=$columnName;
}
}
foreach($columns as $name)
$columnInsertNames[$name]=$this->getDbConnection()->quoteColumnName($name);
$columnInsertNamesSqlPart=implode($templates['columnInsertNameGlue'],$columnInsertNames);
foreach($data as $rowKey=>$rowData)
{
$columnInsertValues=array();
foreach($columns as $columnName)
{
$column=$table->getColumn($columnName);
$columnValue=array_key_exists($columnName,$rowData) ? $rowData[$columnName] : new CDbExpression('NULL');
if($columnValue instanceof CDbExpression)
{
$columnInsertValue=$columnValue->expression;
foreach($columnValue->params as $columnValueParamName=>$columnValueParam)
$params[$columnValueParamName]=$columnValueParam;
}
else
{
$placeholder = str_replace("#", "hashtag", $columnName);
$columnInsertValue=':'.$placeholder.'_'.$rowKey;
$params[':'.$placeholder.'_'.$rowKey]=$column->typecast($columnValue);
}
$columnInsertValues[]=strtr($templates['columnInsertValue'],array(
'{{column}}'=>$columnInsertNames[$columnName],
'{{value}}'=>$columnInsertValue,
));
}
$rowInsertValues[]=strtr($templates['rowInsertValue'],array(
'{{tableName}}'=>$tableName,
'{{columnInsertNames}}'=>$columnInsertNamesSqlPart,
'{{columnInsertValues}}'=>implode($templates['columnInsertValueGlue'],$columnInsertValues)
));
}
$sql=strtr($templates['main'],array(
'{{tableName}}'=>$tableName,
'{{columnInsertNames}}'=>$columnInsertNamesSqlPart,
'{{rowInsertValues}}'=>implode($templates['rowInsertValueGlue'], $rowInsertValues),
));
$command=$this->getDbConnection()->createCommand($sql);
foreach($params as $name=>$value)
$command->bindValue($name,$value);
return $command;
}
}
Но мне интересно, есть ли другой способ, который не потребовал бы, чтобы я мог реализовать необработанные запросы или расширить класс, чтобы просто переопределить этот метод.
У нас есть этот код, который работает хорошо большую часть времени, за исключением случая, я опишу слегка последнее: < /p> [code]/** * Recovers archived survey responses * * @param int $surveyId survey ID * @param string $archivedResponseTableName archived response table name to be imported * @param bool $preserveIDs if archived response IDs should be preserved * @param array $validatedColumns the columns that are validated and can be inserted again * @return integer number of rows affected by the execution. * @throws Exception execution failed */ function recoverSurveyResponses(int $surveyId, string $archivedResponseTableName, $preserveIDs, array $validatedColumns = []): int { if (!is_array($validatedColumns)) { $validatedColumns = []; } $pluginDynamicArchivedResponseModel = PluginDynamic::model($archivedResponseTableName); $targetSchema = SurveyDynamic::model($surveyId)->getTableSchema(); $encryptedAttributes = Response::getEncryptedAttributes($surveyId); if ((App()->db->tablePrefix) && (strpos($archivedResponseTableName, App()->db->tablePrefix) === 0)) { $tbl_name = str_replace('old_survey', 'old_tokens', substr($archivedResponseTableName, strlen(App()->db->tablePrefix))); } else { $tbl_name = str_replace('old_survey', 'old_tokens', $archivedResponseTableName); } $archivedTableSettings = ArchivedTableSettings::model()->findByAttributes(['tbl_name' => $tbl_name, 'tbl_type' => 'response']); $archivedEncryptedAttributes = []; if ($archivedTableSettings) { $archivedEncryptedAttributes = json_decode($archivedTableSettings->properties, true); } $archivedResponses = new CDataProviderIterator(new CActiveDataProvider($pluginDynamicArchivedResponseModel), 500);
$tableName = "{{survey_$surveyId}}"; $importedResponses = 0; $batchData = []; foreach ($archivedResponses as $archivedResponse) { $dataRow = []; // Using plugindynamic model because I dont trust surveydynamic. $targetResponse = new PluginDynamic($tableName); if ($preserveIDs) { $targetResponse->id = $archivedResponse->id; $dataRow['id'] = $archivedResponse->id; }
foreach ($additionalFields as $additionalField) { if (isset($archivedResponse->{$additionalField}) && isset($targetSchema->columns[$additionalField])) { $dataRow[$additionalField] = $archivedResponse->{$additionalField}; } }
$beforeDataEntryImport = new PluginEvent('beforeDataEntryImport'); $beforeDataEntryImport->set('iSurveyID', $surveyId); $beforeDataEntryImport->set('oModel', $targetResponse); App()->getPluginManager()->dispatchEvent($beforeDataEntryImport);
if ($targetResponse->validate()){ $batchData[] = $dataRow; } if (count($batchData) % 500 === 0) { if ($preserveIDs) { switchMSSQLIdentityInsert("survey_$surveyId", true); } $builder = App()->db->getCommandBuilder(); $command = $builder->createMultipleInsertCommand($tableName, $batchData); $importedResponses += $command->execute(); if ($preserveIDs) { switchMSSQLIdentityInsert("survey_$surveyId", false); } $batchData = []; }
unset($targetResponse); }
if (count($batchData)) { if ($preserveIDs) { switchMSSQLIdentityInsert("survey_$surveyId", true); } $builder = App()->db->getCommandBuilder(); $command = $builder->createMultipleInsertCommand($tableName, $batchData); $importedResponses += $command->execute(); if ($preserveIDs) { switchMSSQLIdentityInsert("survey_$surveyId", false); } } return $importedResponses; } < /code> Короче говоря, он динамически строит партии, не зная заранее, какая целевая таблица будет, каковы были ее поля. Обзор активируется, а архив ответов импортируется обратно. Он был выпущен весной, и жалоб не было. Но в последнее время, когда мы тестировали еще одну функцию, которую мы собирались выпустить, я понял, что это не очень хорошо работает для конкретного опроса ... Поэтому я отладил проблему и понял, что виновником является то, что ответы для некоторых типов вопросов хранятся в полях, содержащих #[/code], например, 282267x506x5569SQ04 #0 . Теперь при вызове cdbcommandbuilder :: createmultipleinsertcommand (см. https://www.yiiframework.com/doc/api/1.1/cdbcommandbuilder#composemultipleinsertcommand-detail), я имею в виду [code]$command = $builder->createMultipleInsertCommand($tableName, $batchData); [/code] Мы должны пройти $ batchdata , который представляет собой массив строк данных, каждая строка данных является ассоциативным массивом, который отображает имя столбца со значением столбца. Например: < /p> [code][ [ //... "282267X506X5569SQ04#0" => "some answher here" //... ], //... ] < /code> и это генерирует команду, которая выглядит так: < /p> INSERT INTO `lime_survey_282267` (`282267X506X5530`, `282267X506X5531`, `282267X507X5534SQ001`, `282267X507X5534SQ002`, `282267X507X5534SQ003`, `282267X507X5534SQ004`, `282267X504X5513`, `282267X504X5514`, `282267X504X5515`, `282267X504X5516`, `282267X504X5517`, `282267X504X5518SQ01`, `282267X504X5518SQ02`, `282267X504X5518SQ03`, `282267X504X5518SQ04`, `282267X504X5519SQ01`, `282267X504X5519SQ02`, `282267X504X5519SQ03`, `282267X504X5519SQ04`, `282267X504X5520SQ01`, `282267X504X5520SQ02`, `282267X504X5520SQ03`, `282267X504X5520SQ04`, `282267X505X5521`, `282267X505X5522SQ01`, `282267X505X5522SQ02`, `282267X505X5522SQ03`, `282267X505X5522SQ04`, `282267X505X5523SQ001`, `282267X505X5523SQ002`, `282267X505X5523SQ003`, `282267X505X5524SQ01`, `282267X505X5524SQ02`, `282267X505X5524SQ03`, `282267X505X5524SQ04`, `282267X506X5525`, `282267X506X5526`, `282267X506X5527`, `282267X506X5528`, `282267X506X5549`, `282267X506X5529`, `282267X506X5530other`, `282267X506X5531comment`, `282267X506X5535`, `282267X506X5536`, `282267X506X5542`, `282267X506X5538SQ01`, `282267X506X5538SQ02`, `282267X506X5538SQ03`, `282267X506X5538SQ04`, `282267X506X5547SQ01`, `282267X506X5547SQ02`, `282267X506X5547SQ03`, `282267X506X5547SQ04`, `282267X506X5539SQ01`, `282267X506X5539SQ02`, `282267X506X5539SQ03`, `282267X506X5539SQ04`, `282267X506X5540SQ01`, `282267X506X5540SQ02`, `282267X506X5540SQ03`, `282267X506X5540SQ04`, `282267X506X5541SQ01`, `282267X506X5541SQ02`, `282267X506X5541SQ03`, `282267X506X5541SQ04`, `282267X506X5550SQ01`, `282267X506X5550SQ02`, `282267X506X5550SQ03`, `282267X506X5550SQ04`, `282267X506X5546SQ01#0`, `282267X506X5546SQ01#1`, `282267X506X5546SQ02#0`, `282267X506X5546SQ02#1`, `282267X506X5546SQ03#0`, `282267X506X5546SQ03#1`, `282267X506X5546SQ04#0`, `282267X506X5546SQ04#1`, `282267X506X5569SQ01#0`, `282267X506X5569SQ01#1`, `282267X506X5569SQ02#0`, `282267X506X5569SQ02#1`, `282267X506X5569SQ03#0`, `282267X506X5569SQ03#1`, `282267X506X5569SQ04#0`, `282267X506X5569SQ04#1`, `282267X507X5532SQ01`, `282267X507X5532SQ02`, `282267X507X5532SQ03`, `282267X507X5532SQ04`, `282267X507X5532other`, `282267X507X5533SQ01`, `282267X507X5533SQ02`, `282267X507X5533SQ03`, `282267X507X5533SQ04`, `282267X507X5533SQ05`, `282267X507X5534SQ001comment`, `282267X507X5534SQ002comment`, `282267X507X5534SQ003comment`, `282267X507X5534SQ004comment`, `282267X507X5552`, `282267X507X5553`, `282267X507X55371`, `282267X507X55372`, `282267X507X55373`, `282267X507X55374`, `282267X507X55511`, `282267X507X55512`, `282267X507X55513`, `282267X507X55514`, `282267X508X5554`, `282267X508X5555`, `282267X508X5556`, `282267X508X5557`, `282267X508X5566`, `282267X508X5567`, `282267X508X5568`, `282267X508X5558SH101`, `282267X508X5558SH102`, `282267X508X5559SQ201`, `282267X508X5559SQ202`, `282267X508X5562`, `282267X508X5560`, `282267X508X5561`, `282267X509X5563SQ01`, `282267X509X5563SQ02`, `282267X509X5563SQ03`, `282267X509X5563SQ04`, `282267X509X5564SQ01`, `282267X509X5564SQ02`, `282267X509X5564SQ03`, `282267X509X5564SQ04`, `282267X509X5565SQ01`, `282267X509X5565SQ02`, `282267X509X5565SQ03`, `282267X509X5565SQ04`, `startdate`, `datestamp`, `lastpage`, `startlanguage`, `seed`) V A L U E S ( : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 5 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 6 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 7 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 8 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 8 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 8 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 8 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 9 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 9 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 9 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 1 9 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 2 0 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 2 0 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 2 0 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 4 X 5 5 2 0 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 2 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 2 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 2 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 2 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 3 S Q 0 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 3 S Q 0 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 3 S Q 0 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 4 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 4 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 4 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 5 X 5 5 2 4 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 5 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 6 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 7 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 8 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 9 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 2 9 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 0 o t h e r _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 1 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 5 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 6 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 8 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 8 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 8 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 8 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 7 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 7 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 7 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 7 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 9 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 9 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 9 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 3 9 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 0 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 0 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 0 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 0 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 1 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 1 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 1 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 1 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 5 0 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 5 0 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 5 0 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 5 0 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 1 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 1 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 2 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 2 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 3 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 3 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 4 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 4 6 S Q 0 4 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 1 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 1 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 2 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 2 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 3 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 3 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 4 # 0 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 6 X 5 5 6 9 S Q 0 4 # 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 2 o t h e r _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 3 S Q 0 5 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 1 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 2 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 3 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 4 S Q 0 0 4 c o m m e n t _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 7 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 7 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 7 3 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 3 7 4 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 1 1 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 1 2 _ 0 , < b r / > : 2 8 2 2 6 7 X 5 0 7 X 5 5 5 1 3 _ 0 , < b r / > : 2 8 2 2 6 7X507X55514_0, :282267X508X5554_0, :282267X508X5555_0, :282267X508X5556_0, :282267X508X5557_0, :282267X508X5566_0, :282267X508X5567_0, :282267X508X5568_0, :282267X508X5558SH101_0, :282267X508X5558SH102_0, :282267X508X5559SQ201_0, :282267X508X5559SQ202_0, :282267X508X5562_0, :282267X508X5560_0, :282267X508X5561_0, :282267X509X5563SQ01_0, :282267X509X5563SQ02_0, :282267X509X5563SQ03_0, :282267X509X5563SQ04_0, :282267X509X5564SQ01_0, :282267X509X5564SQ02_0, :282267X509X5564SQ03_0, :282267X509X5564SQ04_0, :282267X509X5565SQ01_0, :282267X509X5565SQ02_0, :282267X509X5565SQ03_0, :282267X509X5565SQ04_0, :startdate_0, :datestamp_0, :lastpage_0, :startlanguage_0, :seed_0), (:282267X506X5530_1, :282267X506X5531_1, :282267X507X5534SQ001_1, :282267X507X5534SQ002_1, :282267X507X5534SQ003_1, :282267X507X5534SQ004_1, :282267X504X5513_1, :282267X504X5514_1, :282267X504X5515_1, :282267X504X5516_1, :282267X504X5517_1, :282267X504X5518SQ01_1, :282267X504X5518SQ02_1, :282267X504X5518SQ03_1, :282267X504X5518SQ04_1, :282267X504X5519SQ01_1, :282267X504X5519SQ02_1, :282267X504X5519SQ03_1, :282267X504X5519SQ04_1, :282267X504X5520SQ01_1, :282267X504X5520SQ02_1, :282267X504X5520SQ03_1, :282267X504X5520SQ04_1, :282267X505X5521_1, :282267X505X5522SQ01_1, :282267X505X5522SQ02_1, :282267X505X5522SQ03_1, :282267X505X5522SQ04_1, :282267X505X5523SQ001_1, :282267X505X5523SQ002_1, :282267X505X5523SQ003_1, :282267X505X5524SQ01_1, :282267X505X5524SQ02_1, :282267X505X5524SQ03_1, :282267X505X5524SQ04_1, :282267X506X5525_1, :282267X506X5526_1, :282267X506X5527_1, :282267X506X5528_1, :282267X506X5549_1, :282267X506X5529_1, :282267X506X5530other_1, :282267X506X5531comment_1, :282267X506X5535_1, :282267X506X5536_1, :282267X506X5542_1, :282267X506X5538SQ01_1, :282267X506X5538SQ02_1, :282267X506X5538SQ03_1, :282267X506X5538SQ04_1, :282267X506X5547SQ01_1, :282267X506X5547SQ02_1, :282267X506X5547SQ03_1, :282267X506X5547SQ04_1, :282267X506X5539SQ01_1, :282267X506X5539SQ02_1, :282267X506X5539SQ03_1, :282267X506X5539SQ04_1, :282267X506X5540SQ01_1, :282267X506X5540SQ02_1, :282267X506X5540SQ03_1, :282267X506X5540SQ04_1, :282267X506X5541SQ01_1, :282267X506X5541SQ02_1, :282267X506X5541SQ03_1, :282267X506X5541SQ04_1, :282267X506X5550SQ01_1, :282267X506X5550SQ02_1, :282267X506X5550SQ03_1, :282267X506X5550SQ04_1, :282267X506X5546SQ01#0_1, :282267X506X5546SQ01#1_1, :282267X506X5546SQ02#0_1, :282267X506X5546SQ02#1_1, :282267X506X5546SQ03#0_1, :282267X506X5546SQ03#1_1, :282267X506X5546SQ04#0_1, :282267X506X5546SQ04#1_1, :282267X506X5569SQ01#0_1, :282267X506X5569SQ01#1_1, :282267X506X5569SQ02#0_1, :282267X506X5569SQ02#1_1, :282267X506X5569SQ03#0_1, :282267X506X5569SQ03#1_1, :282267X506X5569SQ04#0_1, :282267X506X5569SQ04#1_1, :282267X507X5532SQ01_1, :282267X507X5532SQ02_1, :282267X507X5532SQ03_1, :282267X507X5532SQ04_1, :282267X507X5532other_1, :282267X507X5533SQ01_1, :282267X507X5533SQ02_1, :282267X507X5533SQ03_1, :282267X507X5533SQ04_1, :282267X507X5533SQ05_1, :282267X507X5534SQ001comment_1, :282267X507X5534SQ002comment_1, :282267X507X5534SQ003comment_1, :282267X507X5534SQ004comment_1, :282267X507X5552_1, :282267X507X5553_1, :282267X507X55371_1, :282267X507X55372_1, :282267X507X55373_1, :282267X507X55374_1, :282267X507X55511_1, :282267X507X55512_1, :282267X507X55513_1, :282267X507X55514_1, :282267X508X5554_1, :282267X508X5555_1, :282267X508X5556_1, :282267X508X5557_1, :282267X508X5566_1, :282267X508X5567_1, :282267X508X5568_1, :282267X508X5558SH101_1, :282267X508X5558SH102_1, :282267X508X5559SQ201_1, :282267X508X5559SQ202_1, :282267X508X5562_1, :282267X508X5560_1, :282267X508X5561_1, :282267X509X5563SQ01_1, :282267X509X5563SQ02_1, :282267X509X5563SQ03_1, :282267X509X5563SQ04_1, :282267X509X5564SQ01_1, :282267X509X5564SQ02_1, :282267X509X5564SQ03_1, :282267X509X5564SQ04_1, :282267X509X5565SQ01_1, :282267X509X5565SQ02_1, :282267X509X5565SQ03_1, :282267X509X5565SQ04_1, :startdate_1, :datestamp_1, :lastpage_1, :startlanguage_1, :seed_1) < /code> , а затем заполнители получают некоторые значения из архивов. Я сделал некоторую отладку, и я могу с абсолютной уверенностью сказать, что виновником является то, что имена столбцов содержат хэштеги, и эти хэштеги не очень хорошо работают вместе с заполнителями (см. Допустимые персонажи PDO). Refactor Все ссылки на имена столбцов, которые имеют хэштеги. Если все остальное не удастся, я найду какую -то другую пакетную функциональность или внедрим свои собственные с нуля. Тем не менее, я колебаюсь, потому что необходимо поддерживать несколько RDBMS, таких как MySQL, PostgreSQL, SQL Server и т. Д. Внутренне это то, что выполняла функция: < /p> /** * Creates a multiple INSERT command. * This method could be used to achieve better performance during insertion of the large * amount of data into the database tables. * @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string). * @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value). * If a key is not a valid column name, the corresponding value will be ignored. * @return CDbCommand multiple insert command * @since 1.1.14 */ public function createMultipleInsertCommand($table,array $data) { return $this->composeMultipleInsertCommand($table,$data); } < /code> и, конечно, функция, которую она вызывает: < /p> /** * Creates a multiple INSERT command. * This method compose the SQL expression via given part templates, providing ability to adjust * command for different SQL syntax. * @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string). * @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value). * If a key is not a valid column name, the corresponding value will be ignored. * @param array $templates templates for the SQL parts. * @return CDbCommand multiple insert command * @throws CDbException if $data is empty. */ protected function composeMultipleInsertCommand($table,array $data,array $templates=array()) { if (empty($data)) throw new CDbException(Yii::t('yii','Can not generate multiple insert command with empty data set.')); $templates=array_merge( array( 'main'=>'INSERT INTO {{tableName}} ({{columnInsertNames}}) VALUES {{rowInsertValues}}', 'columnInsertValue'=>'{{value}}', 'columnInsertValueGlue'=>', ', 'rowInsertValue'=>'({{columnInsertValues}})', 'rowInsertValueGlue'=>', ', 'columnInsertNameGlue'=>', ', ), $templates ); $this->ensureTable($table); $tableName=$table->rawName; $params=array(); $columnInsertNames=array(); $rowInsertValues=array();
$columns=array(); foreach($data as $rowData) { foreach($rowData as $columnName=>$columnValue) { if(!in_array($columnName,$columns,true)) if($table->getColumn($columnName)!==null) $columns[]=$columnName; } } foreach($columns as $name) $columnInsertNames[$name]=$this->getDbConnection()->quoteColumnName($name); $columnInsertNamesSqlPart=implode($templates['columnInsertNameGlue'],$columnInsertNames);
foreach($params as $name=>$value) $command->bindValue($name,$value);
return $command; } [/code] Итак, насколько я знаю, мне нужно передать точное имя столбца, чтобы в INSERT предложение идентифицировало его должным образом. И в то же время я получаю < /p>
cdbcommand не удалось выполнить оператор SQL: sqlstate [hy093]: неверный номер параметра: параметр не был дефицит. Дело в том, что тот же ключ идентифицирует столбец и, следовательно, должен иметь # в его имени, и, как это ни парадоксально, заполнитель также генерируется из этого.[code]class LSCDbCommandBuilder extends CdbCommandBuilder { /** * Creates a multiple INSERT command. * This method compose the SQL expression via given part templates, providing ability to adjust * command for different SQL syntax. * @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string). * @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value). * If a key is not a valid column name, the corresponding value will be ignored. * @param array $templates templates for the SQL parts. * @return CDbCommand multiple insert command * @throws CDbException if $data is empty. */ protected function composeMultipleInsertCommand($table,array $data,array $templates=array()) { if (empty($data)) throw new CDbException(Yii::t('yii','Can not generate multiple insert command with empty data set.')); $templates=array_merge( array( 'main'=>'INSERT INTO {{tableName}} ({{columnInsertNames}}) VALUES {{rowInsertValues}}', 'columnInsertValue'=>'{{value}}', 'columnInsertValueGlue'=>', ', 'rowInsertValue'=>'({{columnInsertValues}})', 'rowInsertValueGlue'=>', ', 'columnInsertNameGlue'=>', ', ), $templates ); $this->ensureTable($table); $tableName=$table->rawName; $params=array(); $columnInsertNames=array(); $rowInsertValues=array();
$columns=array(); foreach($data as $rowData) { foreach($rowData as $columnName=>$columnValue) { if(!in_array($columnName,$columns,true)) if($table->getColumn($columnName)!==null) $columns[]=$columnName; } } foreach($columns as $name) $columnInsertNames[$name]=$this->getDbConnection()->quoteColumnName($name); $columnInsertNamesSqlPart=implode($templates['columnInsertNameGlue'],$columnInsertNames);
foreach($params as $name=>$value) $command->bindValue($name,$value);
return $command; } } [/code] Но мне интересно, есть ли другой способ, который не потребовал бы, чтобы я мог реализовать необработанные запросы или расширить класс, чтобы просто переопределить этот метод.