我尝试使用变量查询数据库,以检测所选列以及搜索词。
为简单起见,我删除了数据库连接错误处理代码。问题代码是:
$find = mysqli_real_escape_string($dbc, test_input($_POST["find"]));
$field = $_POST["field"];
$data = mysqli_query($dbc, "SELECT * FROM ticket WHERE '$field' = '$find'");
//Results
while($result = mysqli_fetch_array($data)) {
echo "Result 1" . $result['number'];
echo "<br>";
echo "<br>";
echo "Result 2" . $result['description'];
echo "<br>";
echo "<br>";
echo "Result 3" . $result['contact'];
echo "<br>";
echo "<br>";
echo "Result 4" . $result['assignee'];
echo "<br>";
echo "<br>";
echo "Result 5" . $result['priority'];
echo "<br>";
echo "<br>";
}
$anymatches = mysqli_num_rows($data);
if ($anymatches == 0) {
echo "Sorry, but we can not find an entry to match your query<br><br>";
}
我在文本框中输入一个字词$find
)并从下拉菜单($field
)中选择我正在搜索的内容,例如我选择了受让人。
即使我在数据库中知道它,我仍然会返回&#34;抱歉,但我们找不到符合您查询的条目&#34;。
但是,如果我将MYSQL查询中的$ field变量更改为实际的列名。示例:
$data = mysqli_query($dbc, "SELECT * FROM ticket WHERE assignee = '$find'");
它返回正确的数据。我甚至在执行期间回复$field
变量以确保其保持正确的选择,并且确实如此。有什么想法吗?
由于
答案 0 :(得分:1)
问题是您是否使用引号('
)而不是反引号来围绕字段名称。
$data = mysqli_query($dbc, "SELECT * FROM ticket WHERE '$field' = '$find'");
到
$data = mysqli_query($dbc, "SELECT * FROM ticket WHERE `$field` = '$find'");
或
$data = mysqli_query($dbc, "SELECT * FROM ticket WHERE $field = '$find'");
您当前的代码主要是尝试查找一个字符串与另一个字符串匹配的行,这将永远不会成为现实。
答案 1 :(得分:0)
像
一样进行查询 $data = mysqli_query($dbc, "
SELECT * FROM ticket
WHERE {$field} = '$find'
");