mysql_field_name进入数组

时间:2012-04-08 20:46:46

标签: php mysql

我正在尝试将表中的字段名称与$ _GET字段名称进行比较,如果它存在于表中,则创建一个Query字符串,如果我单独执行它们,我就很难将mysql_field_name加载到数组中{{ 1}}它可以工作但加载所有像$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); 

3 个答案:

答案 0 :(得分:2)

你应该看一下php文档:http://php.net/manual/de/function.mysql-field-name.php

此功能中的第二个参数不是可选的,因此您必须采用第二种方法。

如果你想让它成为动态的,你可以使用mysql_num_field函数,它给你列数。之后你可以构建一个循环,循环这么多次,每次调用mysql_field_name函数。

答案 1 :(得分: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的性能。

答案 2 :(得分: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);