2012-04-08 26 views
3

我想比較表中的字段名稱與$ _GET字段名稱,如果它存在於表中創建一個查詢字符串,我很麻煩加載mysql_field_name到數組中,如果我單獨做它們像$t1 = mysql_field_name($result,1);它的工作原理,但加載它們都像$vars = mysql_field_name($result);似乎沒有工作。mysql_field_name到數組

此劑量不工作

$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); 

回答

2

你應該看看PHP文檔:http://php.net/manual/de/function.mysql-field-name.php

在這個函數的第二個參數是不可選的,所以你必須採取第二種方法。

如果你想使它成爲動態的,你可以使用mysql_num_field函數,它提供了列數。之後,你可以建立一個循環,迭代多次,每次調用mysql_field_name函數。

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的性能。

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);