LoginSignup
1
0

More than 5 years have passed since last update.

WordpressでTwitterのtweetのIDを登録するとDB上で値が「2147483647」になる時の対処法

Posted at

Wordpressで作ってるサイトにTwitterに投稿したtweetのIDをDBに登録するという処理を作ったところ、登録したデータが必ず「2147483647」になる状況に遭遇。
すんごい初歩的なミスですが一応メモ。

原因

  1. $wpdb->insertの第3引数(プレースホルダー)を設定してない。または、IDのプレースホルダーを整数型(%d)にしてる。
  2. 32bitシステム上でPHPを動かしてる
  3. 登録先のカラムのデータ型がbigintじゃなくてint

Twitter APIからの返り値は文字列なのですが、プレースホルダー無しでinsertを実行すると整数型に変換してSQLを実行されるっぽい。(原因1)(元のソースまで見に行ってない)
更に32bitシステムにおいて運用されているPHPの整数の最高値が「2147483647」だそうで。(原因2)(参考:php.net)
自分の環境では原因1と2によって登録される値が必ず「2147483647」になりました。

原因3は設計ミスなのですが、考えられる可能性として一応記載。

対処法

  1. $wpdb->insertの第3引数にプレースホルダーを設定する。プレースホルダーは文字列型(%s)にする。
  2. 登録先のカラムのデータ型がintだったらbigintにする。

教訓

面倒くさがらずプレースホルダーはキチンと設定しておく。

蛇足

文字列型で指定するのがセキュリティ面で怖い時はis_numericとかで事前に確認するといいかもしれない。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0