月間29,000PV達成! 収益は毎日発生中! ギランバレー症候群に関する情報を集めています

【PHP】「7 number of parameters must be between 0 and 65535」解決方法!

             
  • 2019.10.11
  • PHP
【PHP】「7 number of parameters must be between 0 and 65535」解決方法!
Advertisement

 

PHPでクエリパラメータが多すぎる場合に発生するエラーです

細かいことは後ほど書くとして、エラー内容が意味不明すぎる。。

DBは「PostgreSQL」になります。

 

僕のプロフィールはこちら

 

 

「7 number of parameters must be between 0 and 65535」エラーって?

パラメータの数が多すぎる場合にエラーが発生します

例えば、SQLのINSERT文で一気に登録する場合などに発生します。

 

INSERT文の一括登録は「マルチプルインサート」なんて言ったりします。

 

 

解消方法は?

PDOは一度に処理できるクエリパラメータが「65535」までです。

つまり、65535以下にしてあげればよいわけです。

ということで、以下のサイトを参考に配列を分割するなど、一度に登録していたものを分割します。

 

■PDOException: SQLSTATE[HY000]: General error: 7 number of parameters must be between 0 and 65535

URL:「https://stackoverflow.com/questions/40361164/pdoexception-sqlstatehy000-general-error-7-number-of-parameters-must-be-bet」

 

 

Advertisement

 

実は配列の分割だけではダメ

上記の対応をしてみたのですが、同じエラーが出ました。

実は、INSERT文のクエリパラメータは、配列で1ではなく、一つ一つのパラメータを1と数えます

つまり、「VALUES(‘a’, ‘b’, ‘c’)」となっていた場合、パラメータは「1」ではなく「3」になります。

だめやん。

 

 

パラメータの数は計算するしかない

パラメータの数はSQLによって異なります。

ってことは、それぞれのSQLで分割する基準(数値)は変わってくるわけです。

まあ、あくまで一度にINSERTをしている箇所だけの問題ですが、データ量の多い処理だと考慮するべきでしょう。

 

 

おすすめ書籍

僕はLaravelの勉強をするのに以下の書籍を購入しました。おすすめですよ!

 

 

 

まとめ

マルチプルインサートってよく使うと思うですよね。

で、このエラーって大量データ扱う場合によく出ると思うんですよね。

なのに、情報が全くなくてびっくりするんですよね。

ではまた。

 

 

関連記事

以下の記事も合わせて読まれています。

Travelerを知らないの?