3

テーブル内のフィールド名を $_GET フィールド名と比較しようとしています。テーブル内に存在する場合はクエリ文字列を作成します。mysql_field_name を配列にロードするのに問題 $t1 = mysql_field_name($result,1);があります。すべてが機能$vars = mysql_field_name($result);していないようです。

これは機能しません

$query = array();
$result = mysql_query("SELECT * FROM search_prof");
$vars = mysql_field_name($result);

foreach ($vars as $v)
{
    if (isset($_GET[$v]))
    {
        $query[] = $v.' = "'.addslashes($_GET[$v]).'"';
    }
}
$query = implode(' AND ', $query); 

これは機能します

$t1 = mysql_field_name($result,1);
$t2 = mysql_field_name($result,2);
$t3 = mysql_field_name($result,3);
$t4 = mysql_field_name($result,4);
$t5 = mysql_field_name($result,5);


    $query = array();
    $result = mysql_query("SELECT * FROM search_prof");
    $vars = array('$t1', '$t2', '$t3', '$t4', '$t5'); 

    foreach ($vars as $v)
    {
        if (isset($_GET[$v]))
        {
            $query[] = $v.' = "'.addslashes($_GET[$v]).'"';
        }
    }
    $query = implode(' AND ', $query); 
4

3 に答える 3

2

PHP のドキュメントを参照してください: http://php.net/manual/de/function.mysql-field-name.php

この関数の 2 番目のパラメーターはオプションではないため、2 番目のアプローチを取る必要があります。

とにかく動的にしたい場合は、mysql_num_field 関数を使用できます。これにより、列の数が得られます。その後、毎回 mysql_field_name 関数を呼び出して、この回数反復するループを作成できます。

于 2012-04-08T21:01:30.023 に答える
1

現在のアプローチを機能させたい場合は、次のようなことができると思います。

//Get fields in table
$numberOfFields = mysql_num_fields($result) - 1;

$fields = array();
for ($i = 0; $i <= $numberOfFields; $i++) {
    $fields[] = mysql_field_name($result, $i);
}

//Intersect
$parameters = array_intersect(array_keys($_GET), $fields);

//Query
$q = array();
foreach($parameters as $parameter) {
    $q[] = $v . '="' . addslashes($_GET[$parameter]) . '"';
}

$q = implode(" AND ", $q);

おそらく、代わりにテーブルで DESCRIBE クエリを実行してそれらの結果を解析することもできますが、DESCRIBE のパフォーマンスについてはわかりません。

于 2012-04-08T21:08:13.810 に答える
1

このようなものを使用してフィールドを取得できます。

$query = array();
$result = mysql_query("SELECT * FROM search_prof");
$numFields = mysql_num_fields($result);
$vars = array();
for ( $i = 0; $i < $numFields; $i++ )
    $vars[] = mysql_field_name($result, $i);

foreach ($vars as $v)
{
    if (isset($_GET[$v]))
    {
        $query[] = $v.' = "'.addslashes($_GET[$v]).'"';
    }
}
$query = implode(' AND ', $query); 
于 2012-04-08T21:09:03.517 に答える