0

私はもともとこれを機能させていました:

url:http://server/blah.php?FacilityCode=FT

$facilitycode = mysql_real_escape_string($_GET["FacilityCode"]);
$sql = "SELECT ..." .
       "FROM ..." .
       "WHERE ..." .
       "AND ('" . $facilitycode . "' = '' OR Facility.FacilityCode = '". $facilitycode . "')";
$result = mysql_query($sql);

しかし、私はこれを変更して、人々がクエリで複数の値を送信できるようにします。http://server/blah.php?FacilityCode=FT,CC,DD,EE

クエリを「equals」ではなく「IN」句に変更しようとしましたが、各要素の周りに「」マークを付ける方法がわかりません。

4

5 に答える 5

2

Use implode() function for IN (...).

$a = array('AB', 'CD', 'EF', 'ZE');
echo "field IN ('" . implode("', '", $a) . "')";

... will output:

field IN ('AB', 'CD', 'EF', 'ZE')

+escape every option you get.

于 2012-09-26T22:22:58.323 に答える
0

私はあなたのクエリに基づいてこれを書きましたが、それでもクエリのこの部分は取得できません "AND('"。$facilitycode。"'=''"、とにかく$_GETデータに"、"があるかどうかを確認する必要があります。その変数を「、」で指定すると、$ _GETデータで「、」で区切られたすべてのOR句を追加できます。

その後、以下のように、展開された配列のすべての要素に対してforeachを実行して、クエリを作成します。

<?php

$facilitycode = $_GET["FacilityCode"];

$facility_number_chk = strpos($facilitycode, ",");

if ($facility_number_chk > -1) {

    $facilitycode = explode(",", $facilitycode);

    $sql = "SELECT ..." .
    "FROM ..." .
    "WHERE ..." .
    "AND ('" . $facilitycode . "' = ''";

    foreach($facilitycode as $facode) {

        $facode = mysql_real_escape_string($facode);

        $sql .= " OR Facility.FacilityCode = '". $facode . "'";

    }

    $sql .= "')";

}
else {

    $facilitycode = mysql_real_escape_string($facilitycode);

    $sql = "SELECT ..." .
    "FROM ..." .
    "WHERE ..." .
    "AND ('" . $facilitycode . "' = '' OR Facility.FacilityCode = '". $facilitycode . "')";

}

$result = mysql_query($sql);

また、$ _ GETデータに要素が1つしかない場合は、通常のクエリで行ったように他の要素を実行します。

于 2012-09-26T22:34:44.703 に答える
0

次のような文字列を作成しようとしている場合: 'AB', 'CD', 'EF', 'ZE'

クエリ内に配置する前にこれを試してください:

$facilitycode = preg_replace('/([^,]+)/', '\'$1\'', $facilitycode);
于 2012-09-26T22:30:48.297 に答える
0
$facilitycode = mysql_real_escape_string($_GET["FacilityCode"]);
$array=explode(',',$facilitycode);
foreach ($array as $a){$output.="'$a',";}
$clause=substr($output,0,-1);
于 2012-09-26T22:23:16.530 に答える
0

いくつかの回答を組み合わせて使用​​することになりました。基本的に、私は "," を爆発させ、次に foreach を実行して ' マークを追加し、escape_string を呼び出してから、内破しました。

$facilitycodes = $_GET["FacilityCode"];
if ($facilitycodes == '') {
  $additionalfilter = '';
}
else {
  $facilitycodearray = explode(",", $facilitycodes);
  foreach($facilitycodearray as &$facilitycode) {
    $facilitycode = "'" . mysql_real_escape_string($facilitycode) . "'";
  }
  $facilitycodesformatted = implode(",", $facilitycodearray);
  $additionalfilter = " AND Facility.FacilityCode IN (" . $facilitycodesformatted . ")";
}

$sql = "SELECT ..." .
"FROM ..." .
"WHERE ..." .
$additionalfilter;
于 2012-09-27T00:52:05.940 に答える