1

私のデータベース テーブルには多くの列があります。複数の列に基づいて検索を行いたい。一部の列の値ではない場合があります。SQLクエリのこれらのフィールドはどのように無効になりますか? ありがとうございました。

例:

$C1=$_POST[c1];

$C2=$_POST[c2];

SELECT * FROM mytable WHERE column1='$c1' AND column2='$c2'

C2 を null にする場合は、SQL クエリから無効にします。

1 つの方法は次のとおりです。

if(!$_POST[C2]){
   SELECT * FROM mytable WHERE column1='$c1'
}

...

私のテーブルには多くの列があるため、SQLクエリを使用して実行したいと考えています。

4

3 に答える 3

2

まず、そのような変数を内部に持つクエリを書くべきではありません。PDO / mysqli準備済みステートメントについて学びます。

次に、配列のキー参照は文字列または整数のいずれかにする必要があります。この式$_POST[c1]は、ほとんどの場合、注意を促し、文字列への暗黙的な変換を引き起こします。と書いたほうがいい$_POST['c1']です。

第三に、あなたの質問に答えるために、 と を使用isset()strlen()て、値が「空」、つまり空の文字列かどうかを判断できます。

$params = array($_POST['c1']); // you should also check whether $_POST['c1'] is defined too
$sql = 'SELECT * FROM `table_name` WHERE column1 = ?';
if (isset($_POST['c2']) && strlen($_POST['c2'])) {
    $sql .= ' AND column2 = ?';
    $params[] = $_POST['c2'];
}

$stmt = $db->prepare($sql);
$stmt->execute($params);
于 2012-12-19T14:51:11.307 に答える
0

POST 値を反復処理して条件の配列を作成し、それぞれの POST パラメータが空でない場合は条件を追加します。

$conditions = array();
foreach ($_POST as $key => $value) {
  if (!empty($value)) {
    $conditions[] =
      $dbcolumn[$key] . " = '" . mysql_real_escape_string($value) . "'";
  }
}

POST 変数をデータベース列に一致させる配列が必要$dbcolumnになります (または、2 つの間で変換する他の手段を提供する必要があります)。

次に、指定された条件の SQL クエリを作成します。

$query = 'SELECT * FROM mytable';
if (!empty($conditions)) {
  $query .= ' WHERE '  . join(' AND ', $conditions);
}

mysql_real_escape_string()を提供する拡張機能は非推奨であることに注意してください。おそらく、MySQL サーバーと通信するには他の拡張機能を使用する必要があり、他の拡張機能のそれぞれの呼び出しを使用する必要があります。

于 2012-12-19T14:52:17.807 に答える
0

このコードはお勧めしませんが、本当に MySQL で実行したい場合は、次のように LIKE 構文を使用できます。

SELECT * FROM mytable WHERE column1="$c1" AND column2="$c2%"

$c2 の前後に % 文字を追加

しないでください!

于 2012-12-19T15:49:08.673 に答える