-1

タイトルが示すように、HTML フォームで送信されたデータを使用して、MySQL テーブルに行を挿入しようとしています。ただし、一部のフォーム フィールドは空白のままにすることができます。以前、select ステートメントの場合、このループを実行して空でないフィールドを確認し、SQL クエリ文字列を作成しました (説明のためだけに)。ここで、$sql は "SELECT * FROM table WHERE" のようなステートメントです。

for ($i = 0; $i < $size; $i++) {
if( $i != $size - 1 ) {
    if( !empty($formData[$i]) ) {
        $sql = $sql . " {$formFields[$i]} LIKE \"%{$formData[$i]}%\" and"; 
    }
} else {
    if( !empty($formData[$i]) ) {
        $sql = $sql . " {$formFields[$i]} LIKE \"%{$formData[$i]}%\";"; 
    }
    else {
        $sql = substr($sql, 0, strlen($sql)-4 ) . ";"; 
    }
}

}

ただし、この場合、挿入フィールドの一部を空白にすることができますが、以前は "SELECT *" を実行していたため問題ではなく、WHERE 句だけを気にする必要がありました。for ループのモンスターを使用する以外に、これを行う簡単な方法はありますか?

4

4 に答える 4

0

foreach ループを使用します。それが目的であり、コードをより理解しやすくします。クエリを実行するかどうかにかかわらず、すべての列をループし、$_POST/$_GET に存在する場合は追加します。

このようなクエリを作成するための私の一般的な戦略は次のとおりです。

<?php

$formFields = validate( $_REQUEST ); // PLEASE PLEASE PLEASE VALIDATE/ESCAPE YOUR DATA

// You should also normalize HTML name fields to actual MySQL column names, if they're different

// Columns you may or may not want to query
$columns = array( 'foo', 'bar', 'buzz' );

$where = array();
foreach( $columns as $column )
{
  if( ! empty($formFields[$column]) )
  {
    $where[] = "$column = {$formFields[$column]}";
  }
}

$where = implode( ' AND ', $set );

$sql = "SELECT * FROM t WHERE $where";
于 2013-07-03T20:17:34.020 に答える