PHP搜索不使用CASE函数
我有下面的搜索片段,当我只使用mysql表中的value1和value2数据时,它就工作了 当我将PHP搜索不使用CASE函数,php,mysql,Php,Mysql,我有下面的搜索片段,当我只使用mysql表中的value1和value2数据时,它就工作了 当我将Mysql CASE函数添加到带有value1r和value2r的查询中,如下面的示例所示,并尝试在页面上进行搜索时,它给出了以下错误“警告:mysqli_fetch_array()期望参数1是mysqli_result,布尔值在….中给出”,这意味着我在查询中有错误 <?php if(isset($_POST['search'])) { $valueToSearch = $_POS
Mysql CASE函数添加到带有value1r和value2r的查询中,如下面的示例所示,并尝试在页面上进行搜索时,它给出了以下错误“警告:mysqli_fetch_array()期望参数1是mysqli_result,布尔值在….中给出”
,这意味着我在查询中有错误
<?php
if(isset($_POST['search']))
{
$valueToSearch = $_POST['valueToSearch'];
$query = "SELECT * FROM gdata
WHERE
Value1 = '" . $valueToSearch . "' OR
Value2 = '" . $valueToSearch . "' OR
Value1r = '" . $valueToSearch . "' OR
Value2r = '" . $valueToSearch . "'
";
$search_result = filterTable($query);
}
else {
$query = "SELECT Value1, Value2,
CASE
WHEN Value1 >= 90 AND Value1 <= 100
THEN 'A'
WHEN Value1 >= 80 AND Value1 <= 89
THEN 'B'
WHEN Value1 >= 70 AND Value1 <= 79
THEN 'C'
WHEN Value1 >= 0 AND Value1 <= 69
THEN 'F'
ELSE '' END AS Value1r,
CASE
WHEN Value2 >= 90 AND Value2 <= 100
THEN 'A'
WHEN Value2 >= 80 AND Value2 <= 89
THEN 'B'
WHEN Value2 >= 70 AND Value2 <= 79
THEN 'C'
WHEN Value2 >= 0 AND Value2 <= 69
THEN 'F'
ELSE '' END AS Value2r
FROM gdata";
$search_result = filterTable($query);
}
// function to connect and execute the query
function filterTable($query)
{
$connect = mysqli_connect("localhost", "root", "", "db");
$filter_Result = mysqli_query($connect, $query);
return $filter_Result;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Gdata</title>
</head>
<body>
<form action="gdata.php" method="post">
<input type="text" name="valueToSearch" placeholder="Search">
<input type="submit" name="search" value="Filter">
<table>
<tr>
<th>G1</th>
<th>G2</th>
<th>R1</th>
<th>R2</th>
</tr>
<?php
while($row = mysqli_fetch_array($search_result))
{
echo "<tr>";
echo "<td>" . $row['Value1'] . "</td>";
echo "<td>" . $row['Value2'] . "</td>";
echo "<td>" . $row['Value1r'] . "</td>";
echo "<td>" . $row['Value2r'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
</form>
</body>
</html>
我做错了什么?能帮我一点忙吗?谢谢
注意:我的问题并不是关于给定的错误。您可以使用以下方法跟踪错误,将此代码片段放在mysqli\u查询之后
if (!$filter_Result) {
printf("Error: %s\n", mysqli_error($connect));
exit();
}
此错误意味着查询将给出没有记录的空结果
尝试再次编写查询,并在phpmyadmin中测试它,如果它在那里工作正常,那么它将在您的应用程序启动我们的数据库时工作。
创建或替换视图gdata\u视图作为
选择Value1、Value2、CASE WHEN Value1>=90和Value1=80、Value1=70和Value1=0、Value1=90和Value2=80、Value2=70和Value2=0和Value2我在SQL语句中没有看到语法错误。尝试在filterTable()
中放置if($filter\u Result==false){echo mysqli\u error($connect);exit;}
要了解有关错误的更多详细信息,还应转义或删除$valueToSearch
中的特殊字符。如果将搜索短语与或一起使用
在代码的if
部分中会出现SQL语法错误。else
部分在我看来是正确的。可能重复的部分可能会提供有用的信息,但不会提供问题的解决方案。@NigelRen这将提供实际错误并帮助解决问题。正如你自己所说的-这会有帮助,但这应该是一个解决方案。非常感谢!正如您所解释的,当我创建一个视图并对代码进行一点更改时,它就可以工作了。
CREATE OR REPLACE VIEW gdata_view AS
SELECT Value1, Value2, CASE WHEN Value1 >= 90 AND Value1 <= 100 THEN 'A' WHEN Value1 >= 80 AND Value1 <= 89 THEN 'B' WHEN Value1 >= 70 AND Value1 <= 79 THEN 'C' WHEN Value1 >= 0 AND Value1 <= 69 THEN 'F' ELSE '' END AS Value1r, CASE WHEN Value2 >= 90 AND Value2 <= 100 THEN 'A' WHEN Value2 >= 80 AND Value2 <= 89 THEN 'B' WHEN Value2 >= 70 AND Value2 <= 79 THEN 'C' WHEN Value2 >= 0 AND Value2 <= 69 THEN 'F' ELSE '' END AS Value2r FROM gdata
create view for gdata table.
view is your temporary table.
when you change any data in main table view automatically affected.
when you submit data change your table name in your code gdata to gdata_view (gdata_view is a temporary table <= without view is not possible)
$query = "SELECT * FROM gdata
WHERE
Value1 = '" . $valueToSearch . "' OR
Value2 = '" . $valueToSearch . "' OR
Value1r = '" . $valueToSearch . "' OR
Value2r = '" . $valueToSearch . "'
";
replace by
$query = "SELECT * FROM gdata_view
WHERE
Value1 = '" . $valueToSearch . "' OR
Value2 = '" . $valueToSearch . "' OR
Value1r = '" . $valueToSearch . "' OR
Value2r = '" . $valueToSearch . "'
";