WordpressでTwitterのtweetのIDを登録するとDB上で値が「2147483647」になる時の対処法
1115 ワード
Wordpressで作ってるサイトにTwitterに投稿したtweetのIDをDBに登録するという処理を作ったところ、登録したデータが必ず「2147483647」になる状況に遭遇。
すんごい初歩的なミスですが一応メモ。
原因
-
$wpdb->insert
の第3引数(プレースホルダー)を設定してない。または、IDのプレースホルダーを整数型(%d)にしてる。
- 32bitシステム上でPHPを動かしてる
- 登録先のカラムのデータ型がbigintじゃなくてint
$wpdb->insert
の第3引数(プレースホルダー)を設定してない。または、IDのプレースホルダーを整数型(%d)にしてる。Twitter APIからの返り値は文字列なのですが、プレースホルダー無しでinsert
を実行すると整数型に変換してSQLを実行されるっぽい。(原因1)(元のソースまで見に行ってない)
更に32bitシステムにおいて運用されているPHPの整数の最高値が「2147483647」だそうで。(原因2)(参考:php.net)
自分の環境では原因1と2によって登録される値が必ず「2147483647」になりました。
原因3は設計ミスなのですが、考えられる可能性として一応記載。
対処法
-
$wpdb->insert
の第3引数にプレースホルダーを設定する。プレースホルダーは文字列型(%s)にする。
- 登録先のカラムのデータ型がintだったらbigintにする。
教訓
$wpdb->insert
の第3引数にプレースホルダーを設定する。プレースホルダーは文字列型(%s)にする。面倒くさがらずプレースホルダーはキチンと設定しておく。
蛇足
文字列型で指定するのがセキュリティ面で怖い時はis_numeric
とかで事前に確認するといいかもしれない。
Author And Source
この問題について(WordpressでTwitterのtweetのIDを登録するとDB上で値が「2147483647」になる時の対処法), 我々は、より多くの情報をここで見つけました https://qiita.com/aomomo55/items/c3464b728e5cff6551d7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .