我正在尝试将表中的字段名称与 $_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);
你应该看看 php 文档: http://php.net/manual/de/function.mysql-field-name.php
此函数中的第二个参数不是可选的,因此您必须采用第二种方法。
如果你想让它动态化,你可以使用 mysql_num_field 函数,它给你列数。之后,您可以构建一个循环,该循环迭代次数,每次调用mysql_field_name函数。
如果你想让你目前的方法有效,我想你可以做一些事情:
//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 的性能。
您可以使用这样的东西来获取字段。
$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);