2012-03-08 4 views
0

mysqlデータ型に対して特定の値/変数を検証する方法については、クラス、関数、またはideaがあるかどうか疑問です。PHP変数の型をMYSQLのデータ型と照らし合わせてチェックする

私たちはis_int()is_string()is_float()などなどPHPに入っていますが、それらはすべて持っているわけではありません。それとも私たちは?任意のチートシート?何かご意見は?

EDIT: 点は基本的に:

  • 移動trought(例えばCSVから来)値の配列。
  • 私はどのテーブルを知っていて、全ての列情報(データ型s)(adodb付き)を持っています。
  • 各値が特定の列に収まる場合だけでデータはCSVファイルから来ている場合、あなたはすべての値が文字列(たとえ数字列であることを行っていることを忘れてはいけない...
+1

これはなぜ正確にやっていますか? MySQLテーブルに格納されている各フィールドのデータ型がわからない場合は、何か問題があります。あなたが_抽象物を抽象化したい場合は、ORMライブラリを使用してください。 – Bojangles

+0

タイプをチェックする必要があるデータはどこから入手できますか? – zerkms

+1

私はあなたが探しているものを正確には分かりません。 。 。エスケープクエリのためにタイプ検出を処理しようとしているのですか、またはデータが特定のタイプで許可されているかどうかを確認しようとしていますか? PHPの特定の値は、MySQLのさまざまな型と一致する可能性があることも覚えておいてください。たとえば、値 "15.46"は文字列型(SET/ENUMの値も含む)数値型の数値(DECIMAL、FLOAT、DOUBLEなど)。だから、意味のある答えをあなたに与えるために、より詳細な情報を知る必要があります。 – justbeez

答えて

1

をチェックまだ文字列型を持っています)。

だから、is_int()/is_float()の/ etcを使用することはできません。、それが唯一のタイプや変数について説明しますので。値を確認するのにis_numeric()を使うことができますが、これによって "+ 0123.45e6"のような指数表記が可能になります。場合によってはctype_digit()は、この理由で整数をテストするのに便利です。なぜなら、0から9までの数字が文字列にtrueを返すことができるからです。

正規表現は、パターン・ベースのデータ・タイプを識別するために使用できますが、大規模なデータセットを扱う際のパフォーマンス・オーバーヘッドを監視する必要があります。パフォーマンスの観点からは、ほとんどの場合、ereg関数の代わりにpreg_ファミリの関数を使用することをお勧めします。

ENUM型やSET型のようなものを検証する場合は、合法的な値を含む配列を作成するか、クエリでこれらを抽出し、値をin_array()でチェックする必要があります。

CHAR/VARCHARフィールドの場合、列定義を解析し、値の長さが制約内に収まるかどうかを確認できます。

NULL型は、あなたの任意の列に許可されている場合は、これに反対をチェックする必要があります(おそらく、実際のNULL値に空の値または文字列「NULL」をマッピングする)と思います。

実際にこれらの値を適切にエスケープするには、プリペアドステートメントとPDO(PHP Data Objects)拡張を使用してください。これにより、MySQLはタイプに基づいてデータを適切にエスケープできます。 (また、MySQLiを持つプリペアドステートメントを使用することができます。)

をあなたはどのようにそれらを同定するための特定のデータ型を探しているなら、あなたはより完全な答えを容易にするために、あなたの質問を編集したい場合があります。

+0

編集方法がわかりませんので、私が必要とするものをより良く説明できます。とにかくここにすべての良い点と有効な点があります。私が最初から思っていたことは、私の目的のために関数をコード化して、すべての可能性を探る必要があるということです。ちょうどそこに解決策があると思った。最初の点については、すべてのフィールドは文字列ですが、 "someword"のフィールドはmysql DATETIMEに収まらず、INTに収まる "123.487"もありません。とにかく、私はしばらく待って、いくつかのより多くの研究を行い、おそらくあなたの答えを受け入れるだろう:) – eduardev

関連する問題