0

言語: PHP および MySQL

データベースに、値が NULL の列を持つ行がいくつかあります。$params 配列を受け取ったときにクエリを作成する関数があります。その関数に関連するコードは次のとおりです (WHERE 句を作成するため)。

    if (isset($params['where'])) {
        $query .= "WHERE ";
        $count = count($params['where']);
        foreach ($params['where'] as $key => $value) {
            $count--;
            if ($count) {
                $query .= "`$key` ".$value['sign']." '".$value['text']."' AND ";
            } else {
               $query .= "`$key` ".$value['sign']." '".$value['text']."' ";
            }
        }
    }

問題は、$value['text'] を null に設定すると、結果が次のようになることです。

SELECT * FROM `db_profiles` WHERE `committed` IS '' LIMIT 100

$value['text'] = 'NULL' に設定すると、次のようになります。

SELECT * FROM `db_profiles` WHERE `committed` IS 'NULL' LIMIT 100

もちろん、これは何も生成しません。何か案は?

答え

    if (isset($params['where'])) {
        $where_segment = array ();
        foreach ($params['where'] as $key => $value) {
            if (is_null($value['text'])) {
                $where_segment[] = "`".$key."`"." IS NULL";
            } else {
                $where_segment[] = "`$key` ".$value['sign']." '".$value['text']."' ";
            }
        }
        $query .= " WHERE ".implode('AND', $where_segment);
    }
4

4 に答える 4

2
  $string_array = array();

    foreach($params['where'] as $field => $value) {

        if(is_null($value)) {
            $string_array[] = "`$field` IS NULL";
        }
        else {
            $string_array[] = "`$field`='$value'";
        }

    }

 $where_string = "WHERE ".implode(" AND ", $string_array);


 $sql = "SELECT * FROM `db_profiles` $where_string";

$value が NULL の場合、NULL 句の前後の '' マークを省略することに注意してください。

于 2013-02-22T16:11:17.937 に答える
0

このクエリを使用してください。

SELECT * FROM db_profilesWHERE committedIS NULL 制限 100。

一重引用符を削除します。

于 2013-02-22T16:10:57.250 に答える
0

これは、一重引用符なしで役立つはずです

 SELECT * FROM `db_profiles` WHERE `committed` IS NULL LIMIT 100

そのような変数をnullに設定できます

 $value['text'] = NULL;

そして、あなたのクエリで

 SELECT * FROM `db_profiles` WHERE `committed` IS $value['text'] LIMIT 100
于 2013-02-22T16:11:05.593 に答える
0

クエリに値を入力するときは、次のような明示的なチェックが必要です。

if(is_null($value)) {
    $query . ' WHERE something IS NULL';
} else {
    $query . ' WHERE something \'' . $value . '\'';
}

MySQL と PHP を初めて使用する場合は、できるだけ早く準備済みステートメントの使用を開始する必要があることに注意してください。これらは、SQL インジェクションの脆弱性に対して最も安全であり、使いやすいです。ここから始めて、それらの使用法を学ぶことができます。

于 2013-02-22T16:11:22.500 に答える