1

私のテーブルにはこれらのメンバーのみがあるとしましょう - id (key) と date (デフォルトはNULL ) 。php で行を挿入したい場合、クエリの前に日付に値があるかどうかを確認する必要がありますか、それともそのまま挿入できますか-

 $query = "INSERT INTO mytable VALUES(3,{$_GET['date]})" 

また、mysql は date に NULL 値を割り当てますか?

そして、これはどんなに大きくてもテーブルに当てはまりますか?

例:phpから取得され、空(またはnull)である可能性のある多くの値をテーブルに挿入できますか?mysqlは自動的にそれらにNULLを割り当てます(もちろんデフォルトでNULLとして定義した場合)またはすべてを行う必要がありますか?挿入前のチェックの種類は?

4

5 に答える 5

1

これは関連している可能性があり、これにより、SQL インジェクション攻撃に対して脆弱ではないことも確認できます。

各変数を個人的にチェックするだけで、データベースに配置される前に変数をより細かく制御できます。

于 2012-11-08T07:32:26.937 に答える
1

いいえ、パラメータで渡された値を割り当てます$_GET['date']。値が空''で、日付がデータ型の場合は、空の値とは異なるvarchar値が挿入されます。これは、空の文字列が等しくないためです。これらは、SQL では 2 つの異なるものです。''NULLNULL

値を挿入するNULL場合は、列の挿入リストでこの列を無視するか、デフォルト値である が割り当てられますNULL。または、ステートメントの値に明示的に記述しINSERTます。

注意:この方法のコードは、SQL インジェクションに対して脆弱です。代わりに、準備済みステートメントまたは PDO を使用する必要があります。詳細については、これを参照してください。

于 2012-11-08T07:37:20.177 に答える
0

これを試して

 $query = "INSERT INTO mytable VALUES(3,'".$_GET['date']."')"; 

ただし、日付/日時に設定されている場合は、テーブルフィールドのデータ型も考慮してください。その戻り値$_GET['date']も日付の形式である必要があります。

于 2012-11-08T07:34:00.260 に答える
0
  1. そのスニペットは、 SQL インジェクションに対して広く開かれています。値をエスケープするか、準備済みステートメントを使用してください。
  2. 変数に何も含まれていない場合、クエリは次のようになります... VALUES (3,)。これは構文エラーなので、機能しません。
  3. これを に変更するVALUES(3, '{$_GET['date']}')"と、空の変数の場合、クエリは になり... VALUES(3, '')、空の文字列が値になります。これは、問題の列の適切な値にキャストされます。日付列の場合は、認識されない日付にキャストされます。そうではありませんNULL

NULLクエリから列を完全に省略した場合、または明示的に に設定した場合にのみ適用されますNULL。それ以外の場合、値は 以外になりNULLます。

于 2012-11-08T07:36:49.730 に答える
0
$date = date("d-m-Y",strtotime($_GET['date']));
if(isset($date))
    $query = "INSERT INTO mytable VALUES(3,$date)";
于 2012-11-08T07:41:38.113 に答える