2012-08-13 11 views
6

私はこの質問が複数回ここで尋ねられたことを知っていますが、私は解決策を見つけることができませんでした。PDOを使用してMySQLにBIGINTを保存するにはどうすればよいですか?

私たちは、FacebookのIDをBIGINT(20)として保存しているデータベースを使用しています。

create table users(
    fb_id bigint(20) NOT NULL, 
    user_name varchar(30) NOT NULL, 
    CONSTRAINT uk_name unique (user_name), 
    CONSTRAINT pk_fb_id primary key (fb_id) 
)ENGINE=INNODB; 

しかし、PHPのPDOエンジンは、PHPの唯一最大の整数値を挿入することができ、我々は、最大値で制限されているので、つまり2147483647

$stmt->bindParam(':fb_id', $this->fb_id, PDO::PARAM_INT); 

これ、私が理解し、非常に明白ですPHPの整数。文字列を使用しようとしました -

$stmt->bindParam(':fb_id', $this->fb_id, PDO::PARAM_STR); 

しかし、それでも動作しません。

bigintとして保存するための回避策があるかどうかを知りたいと思います。

+2

'PDO :: PARAM_INT'を使用していますが、本当に大きな数値の文字列に値を設定するとどうなりますか? '' 892347932075913 "' –

+1

私が 'PDO :: PARAM_INT'を使用すると、'大きな文字列 'は' 2147483647'まで許されます。 – banskt

+0

'大きな文字列 'としての値を持つ' PDO :: PARAM_STR'も機能しません。私はそれから分かりません。 –

答えて

5

私たちはFacebookのIDをBIGINT(20)として保存しているデータベースを使用しています。

なぜあなたはそれをやっていますか?

私は一般的に、FacebookのIDは数値型として保存するのではなく、代わりに文字列として保存するべきだと思います。数字を何かに保存しても何のメリットもありませんが、いくつかの欠点があります。

+1

問題を解決するために、FacebookのIDを文字列として保存する必要がありました。 しかし私は本当に自分の知識のために何が欠点であるかを知りたいです。あなたはそれにいくつかの光を発散していただけますか? – banskt

+1

簡単に起こりうるいくつかの問題があります。あなたのデータベースドライバは実際に数値として返すので、PHPで浮動小数点にキャストされます。PHPで浮動小数点数が返されます(浮動小数点数が実際のユーザIDと異なる場合があります)。 – CBroe

+0

Facebook IDをbig_intとして保存すると、私はいつも真実ではないと思っていたSQLの比較関数を高速化できます。私はいつも信じてきました。値が大きくて行がたくさんある場合は、厳しいトマト - クエリを最適化して創造的になる必要があり、big_intとして保存すると何の利点も得られないという事実を受け入れる必要があります。この上の答えは、文字列としての保存がベストプラクティスであるという私の疑惑を確認しました。 – FredTheWebGuy

関連する問題