• ベストアンサー

値が 18446744073709551615 になる。

こんにちは、 PHPとMYSQLの連動でサイトを作っています。 会員の情報であるコラムの値がきづくと、 18446744073709551615になっています。 そのコラムは「BIGINT UNSIGNED」で作成してあり、気づくとその数値型の最大値が挿入されているのです。ちなみに正常、今入っている数値はせいぜい100くらいです。 実際にこのコラムの値をPHPでいじるところを調べてみたのですが、さっぱり見当がつきません。 例えば「文字列を入れるとなる」とか「0*0」を入れるとなる。とか、そんなのご存知の方はいらっしゃいませんでしょうか? よろしくお願い致します。

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • taskuni
  • ベストアンサー率71% (49/69)
回答No.1

試してみました。 BIGINT UNSIGNED で作ったカラムに -1 を入れると同じ状況になりましたよ。 一度そちらでもお試しください。

awazak
質問者

お礼

ほんとだ! ありがとうございます。助かりました! とりあえず、BIGINT UNSIGNED を BIGINT にして様子みたいと思います。

関連するQ&A

  • 値が「1」のカラム名を求めたい。

    任意の列の、値が「1」のカラム名を求めるにはどうしたらいいでしょうか? PHP Version 5.1.6 MySQL - 5.0.45 で運用しています。 そもそものテーブルの作り方がおかしいのかも知れませんが、 以下のようになっています。 このテーブルで、IDが「40」の列の値が「1」のカラム名を求めたいのです。 どの様にしたらいいでしょうか? ※カラム名「会員番号110」は実際は整数になっています。 ID  会員番号110  会員番号111  会員番号112  会員番号113  40  1       1       0       1       41  0       1       1       1   $sql ="select * from `member_sub_tbl` where `ID`='$ID'"; $result = mysql_query($sql, $con); //カラムの数を取得する $numFields = mysql_num_fields($result); for($i=0;$i<$numFields;$i++){ $nameFields[] = mysql_field_name($result, $i); } print_r($nameFields); これで、カラム名は全て配列に入るのですが、値が「1」のと限定する方法がわかりません。 ご教授、よろしくお願いいたします。    

    • ベストアンサー
    • PHP
  • フレンドリストのようなものを作る場合の設計

    かなり初心者です。もしかしたら妙な事を訊いているのかもしれません。 php5.4.16とmysql5.5.32でSNSのフレンドリストのような機能を作ろうと思います。 フレンド最大数は1000とします。この場合、1000個もカラムを作るのでしょうか? それとも、会員個別にテーブルを作ってそこで管理するのでしょうか。 もしくは、テーブルは一つとし、会員番号のカラムを二つ用意、関係性を示したテーブルを作るのでしょうか? もしくは、カラムは一個で文字列で操作したりするのでしょうか?(カンマで区切る等) パフォーマンス的にどの設計が正しくて、どの設計が間違いなのでしょうか… 回答よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PDOで取得すると全てSTRING型で取得する?

    PDOを利用してprepareとbindValueでPDO::PARAM_INTなどと型指定をしてINSERTしているのですが、ネットをいろいろ見てみると「型指定をしてもexecute()時に全ての型は文字列として扱われる」と書いています。 これはデータベースの各カラムの型は無視して全て文字列としてINSERTしているのでしょうか? それともデータベースの型にMySQL側で勝手に変換して値を挿入してくれるのでしょうか? INSERTした数値を含むデータをprepareでSELECTしてexecute()してみると数値を含めて全てのカラムがstringとして取得しています。 MySQL側ではカラムの型をINTやFROATとして定義しても数値を文字列として挿入するとMySQL側も文字列として扱うのですか?それとも数値に変換されて挿入されますか? もし文字列として挿入されたらインデックスに影響しますか? いまいちどうすればいいのかわかりません。 一応 $id = 1; $name = "hoge"; $float = 0.055; $stmt = $dbh->prepare("INSERT INTO REGISTRY (id, name, float) VALUES (:id, :name, :float)"); $stmt->bindValue(:id, $id, PDO::PARAM_INT); $stmt->bindValue(:name, $name, PDO::PARAM_STR); $stmt->bindValue(:float, (string)$float, PDO::PARAM_STR); としています。 あと、PDO::PARAM_FLOATはないみたいで、PDO::PARAM_STRにすべきと書いていますが、このように指定してもMySQL側で勝手にFLOAT型に変換して値をINSERTするのでしょうか? どうぞよろしくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQLのNOT NULL制約について

    MySQLでは、あるカラムをNOT NULL制約にしていたとしても、文字列型には空文字が、数値型には0を保存できます。 NULL、空文字、0をそれぞれ区別している仕様自体は問題ないと思いますが、NOT NULL制約のようにあるカラムで特定の値を許可しないような設定でできないのでしょうか。

    • ベストアンサー
    • MySQL
  • 桁数の長くないユニークな値の取得

    Apache2 + PHP5 + MySQLという環境でWebアプリを開発しています。 そこでPHPで生成したランダムでユニークな値をデータベースに格納したいのですが、 その際、値の桁数を10文字程度に制限したいのでmd5などを使うと桁数が長くなりすぎてしまい使うことができません。 ただランダムな文字列を格納しておき、もしデータベースに同じデータがあればもう一度やり直すことなども考えましたが、データが多くなると重複の確立が高くなってしまい、あまり気が進みません。 この場合どのようにすれば解決できるのでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • DECIMALの範囲について

    例えば、以下のページ www.javadrive.jp/mysql/datatype/index1.html などを見ると @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ M:最大表示サイズを表す。正式な最大表示サイズは 255。 D:小数点型に適用され、小数点以下の桁数を表す。最大値は 30 だが、M-2 より大きくしないようにする。 アンパック浮動小数点数。CHAR カラムのように動作する。``アンパック'' とは、その数値が、各桁に 1 文字ずつ使用して文字列として格納されることを意味する。M では、小数点と、負数に使用される '-' 記号はカウントされない(しかし、これらのためのスペースは確保される)。D が 0 の場合、値は小数点も小数部も持たない。DECIMAL 値の最大範囲は、DOUBLE と同じだが、個々の DECIMAL カラムの実際の範囲は、M と D の値によって制限される。UNSIGNED を指定した場合、負数は使用できない。 D を省略した場合、デフォルトは 0。M を省略した場合、デフォルトは 10 MySQL バージョン 3.23 より前のバージョンでは、M 引数に、符号と小数点に必要なスペースを含める必要がある @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ と解説されていますが、読解力が無いため今イチ理解を得ません(^^; どなたか解説頂けませんでしょうか?

    • ベストアンサー
    • MySQL
  • フィールドから値を読み出す

    凄い初歩的な質問だと思いますが、 テーブルから値を出力する時に 「100」などといった数値なら読み込み可能なんですが、 「aaa100」といった文字列の場合ですと、 Warning: pg_query() query failed: ERROR: column "aaa100" does not exist のようなエラーが出てしまいます。 何か特別な出力方法が必要なのでしょうか?

  • 長さ1の空文字列?

    タイトルの通り、長さ1の空文字列で困っています。 現在、Linux、Apache、MySQL、PHPを使って3階層アプリケーションを作っています。 予めMySQLでテーブルの形を決めておいて、CSVからデータを読み込ませておき、 PHPでSQL文を実行してレコードを取得することで、それらをユーザに表示という感じです。 複数あるカラムのうち、空文字列(CSV上でブランクだったもの)は表示させたくないので、 PHPで「 if(カラム=="")~ 」のように比較することで、空文字列だけ避けるつもりでした。 しかし上手くいかなかったので、strlen()で調べて見たところ、返り値が1でした。 本来は空文字列に対してstrlen()は0或いはfalseの返り値を返しますよね。 is_empty()でも空データ扱いにならず、当然NULLの扱いでもありません。 そのため、実データとの区別が出来ずに困っています。 何故、空文字列のカラムを除外したいかというと、 DB上のユニークなレコードを検索したいからです。 select * from where カラム='データ' and カラム='データ'… という風に。 「カラム=''」としてしまうと検索に引っかからなくなってしまいます。 どうすればよいでしょうか。 以下はそれぞれのバージョンです。 MySQL:5.0.95 PHP:5.1.6 Linux:RHEL5 Apache:2.2.3

    • ベストアンサー
    • PHP
  • excel vba 日付型の2つの値を一つのセルに入力する方法

    excel vbaについて教えてください。 Wという変数にDate型で"1:00"という数値が入っており、 Zという変数にDate型で"2:00"という数値が入っています。 この二つを、同じセル内に改行して挿入したいと思っています。 Cells(1, 1) = W & Chr(10) & Z 上記のようにセットしようとすると、 4.16666…7E-02 4.16666…7E-02 といったように値が変形してしまいます。 1:00、2:00という値は前処理で時刻の比較などをしているため、 文字列型にすることはできません。 どのようにしたら 1:00 2:00 といった形にできるでしょうか? 途中で(セルに挿入する直前で)文字列型に 変換する、というようなことはできるでのしょうか? よろしくお願いします。

  • PHPとMySQLで自動取得

    PHPとMySQLでブログを改造しています。今作りたいのはブログの記事を投稿する度にPHPでMySQLにアクセスして文字列を呼び出すというものです。 [例] MySQLのテーブルのカラム1には連番の数字(1~)がはいっていて、カラム2には呼び出したい文字列がはいっています。ちなみに15件のデータがはいっているとします。それで記事を投稿するたびに上から順番に5件ずつ表示したいんです。それで一周したらまた最初からというのが希望です。 どうソースコードを書いていいのか解りません。解る方がいましたら、教えてください。お願いします。

    • ベストアンサー
    • MySQL