0

こんにちは、2 つの配列の値をこのクエリと比較しようとしていますが、これが私が知っている唯一の方法です。

$session = "1,2,3,"
$table_name = "table1";
$column_name = "data1"; // value for test is 1,4,5,
$sql = "";
$sql .= "SELECT * FROM $table_name WHERE ";
$franquia = array();
$franquia = explode(",", $session);
if (!empty($franquia)) {

$final_id = array();
foreach ($franquia as $val) {
    if (trim($val) != '') {
        $final_id[] = $val;
    }
}

$count_data = count($final_id);
foreach ($final_id as $key => $id) {
    if ($id > 0) {
        $sql .= " $id IN ($column_name) ";
        if ($key < $count_data - 1) {
            $sql .= "OR ";
        }
    }
}
}


echo $sql; 

私は何度も値を持っている1,2,3ので、両方の値が1であるため、$sessionとの比較はtrueを返すはずでしたが、結果は得られません。1,4,5$data1$session$data1

実際には、 と のように、両方の配列が同じ場合にのみ機能し$session = 1,2,3ます$data1 = 1,2,3

私は何を間違っていますか?

4

1 に答える 1

0

IN 節の使い方が間違っています。一言で言えば、代わりに

WHERE value IN (column)

正しい使い方は次のとおりです。

WHERE column IN (value, value, value)

これは、あなたがやろうとしていることの助けにはなりません ( IN 節についての詳細)。代わりに、次のことを試してください。

foreach ($final_id as $key => $id) {
    if ($id > 0) {
        $sql .= "$column_name LIKE %$id,%";
        if ($key < $count_data - 1) {
            $sql .= "OR ";
        }
    }
}
}

これでうまくいくはずですが、注意すべき点がいくつかあります。まず、おそらくSQL インジェクションに対して脆弱です。次に、LIKE %% を使用して数値を検索するのは無駄なので、DB 内のデータに別のスキームを使用するか、DB からエントリを事前にフェッチして、結果の文字列を検索します。上記のコードは、避けるべき迅速で汚いハックにすぎないと考えてください:)

于 2012-07-02T20:20:06.707 に答える