我的搜索引擎项目结果页面上出现某种 php 错误
Some sort php error on my search engine project result page
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Search Engine Project</title>
<link rel="stylesheet" type="text/css" href="css/styles.css">
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
</head>
<body>
<div class="container">
<form action="action.php" method="GET" class="search_form result-form" autocomplete="off">
<span class="result-header">Server Search</span>
<input type="text" name="k" class="input result_input" value="<?php echo $_GET['k'] ?>">
<input type="submit" name="search" value="Search Web" class="search">
</form>
</div>
<script src="js/bootstrap.min.js" ></script>
<script src="js/jquery-3.1.1.min.js" ></script>
<script src="js/javascript.js"></script>
</body>
</html>
<?php
$q=$_GET['k'];
if(isset($_GET['search'])){
header("Location:https://www.google.co.in/? gfe_rd=cr&ei=oyBmWN3FNvPx8Afe7a7IDA&gws_rd=ssl#q=$q");
}
if(isset($_GET['image'])){
header("Location:https://www.google.co.in/search? site=&tbm=isch&source=hp&biw=1280&bih=670&q=$q");
}
if(isset($_GET['video'])){
header("Location:https://www.google.com/search? q=$q&biw=1280&bih=670&tbm=vid&source=lnms&sa=X&ved=0ahUKEwiJ_ruKxpvRAhVFgI8KHeVRBK4Q_AUICigD&dpr=1");
}
if(isset($_GET['local'])){
mysql_connect("localhost", "root", "");
mysql_select_db("search_query");
$k = $_GET['k'];
if($k == "") {
echo "";
}
else {
$terms = explode(" ", $k);
$query= "SELECT * FROM search_table WHERE ";
foreach($terms as $each)
{
$i=0;
$i++;
if($i==1)
{
$query .= "keywords LIKE '%$each%' ";
}
else
{
$query .= "OR keywords LIKE '%$each%' ";
}
}
//query
$query=mysql_query($query) or die(mysql_error());;
$numrows= mysql_num_rows($query);
if($numrows>0)
{
while($row = mysql_fetch_assoc($query))
{
$id= $row['id'];
$title= $row['title'];
$description= $row['description'];
$keywords= $row['keywords'];
$link= $row['link'];
echo "<div style=''><h2><a href='$link'>$title</a></h2>
$description</div> <hr><br/> <br/>";
}
}
else
{
echo"No results found for \"<b>$k</b>\"";
}
//disconnect
mysql_close();
}
}
?>
以上是 php 代码,代码在 mysql 数据库中搜索数据库并显示适当的结果......
但是当我在主页上输入前面有很多 space 的所需关键字并按搜索时,它会给出一条错误类型消息:
You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use
near 'keywords LIKE '%%' keywords LIKE '%%' keywords LIKE '%%'
keywords LIKE '%%' keyw' at line 1 error"
我不知道该怎么办。我在谷歌上搜索了很多以寻找修复程序.....
图片
PHP 错误:
空白Space输入:
您的查询因 LIKE
子句中的空值而失败。
例如如果用户输入 book cover
您现有的查询将如下所示:
SELECT *
FROM search_table
WHERE keywords LIKE '%%'
OR keywords LIKE '%%'
OR keywords LIKE '%%'
OR keywords LIKE '%%'
OR keywords LIKE '%book%'
OR keywords LIKE '%%'
OR keywords LIKE '%cover%'
要解决此问题,请先 trim 值 $_GET['k']
。
$k = trim($_GET['k']);
然后,过滤掉空白值,以防用户在单词之间添加多个空格。
$terms = explode(" ", $k);
$terms = array_filter($terms);
现在,您的查询将是
SELECT *
FROM search_table
WHERE keywords LIKE '%book%'
OR keywords LIKE '%cover%'
您收到的错误是由于 OR
未包含在您的 SQL 查询中。因此,错误中的 SQL 是 keywords LIKE '%%' keywords LIKE '%%' keywords LIKE '%%' keywords LIKE '%%'
(没有 OR
)。这样做的原因是您在循环中 $i++
之前设置 $i=0
。因此 $i
始终为 1,并且永远不会附加包含 OR
的字符串。在循环外设置 $i=0
。
出现错误消息是因为 $i=0;
在 内部 循环中。把它移到外面。
同时避免使用空白字符串。
以下是我找到的构建 WHERE
子句的更好方法:
$ors = array();
foreach ...
{
if (...)
$ors[] = 'keywords LIKE ...'
}
$or_str = implode(' OR ', $ors);
我发现这比对 OR
或 AND
列表中的第一项或最后一项进行特殊封装更简单。
与此同时,您应该考虑使用 FULLTEXT
而不是一堆 LIKEs
。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Search Engine Project</title>
<link rel="stylesheet" type="text/css" href="css/styles.css">
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
</head>
<body>
<div class="container">
<form action="action.php" method="GET" class="search_form result-form" autocomplete="off">
<span class="result-header">Server Search</span>
<input type="text" name="k" class="input result_input" value="<?php echo $_GET['k'] ?>">
<input type="submit" name="search" value="Search Web" class="search">
</form>
</div>
<script src="js/bootstrap.min.js" ></script>
<script src="js/jquery-3.1.1.min.js" ></script>
<script src="js/javascript.js"></script>
</body>
</html>
<?php
$q=$_GET['k'];
if(isset($_GET['search'])){
header("Location:https://www.google.co.in/? gfe_rd=cr&ei=oyBmWN3FNvPx8Afe7a7IDA&gws_rd=ssl#q=$q");
}
if(isset($_GET['image'])){
header("Location:https://www.google.co.in/search? site=&tbm=isch&source=hp&biw=1280&bih=670&q=$q");
}
if(isset($_GET['video'])){
header("Location:https://www.google.com/search? q=$q&biw=1280&bih=670&tbm=vid&source=lnms&sa=X&ved=0ahUKEwiJ_ruKxpvRAhVFgI8KHeVRBK4Q_AUICigD&dpr=1");
}
if(isset($_GET['local'])){
mysql_connect("localhost", "root", "");
mysql_select_db("search_query");
$k = $_GET['k'];
if($k == "") {
echo "";
}
else {
$terms = explode(" ", $k);
$query= "SELECT * FROM search_table WHERE ";
foreach($terms as $each)
{
$i=0;
$i++;
if($i==1)
{
$query .= "keywords LIKE '%$each%' ";
}
else
{
$query .= "OR keywords LIKE '%$each%' ";
}
}
//query
$query=mysql_query($query) or die(mysql_error());;
$numrows= mysql_num_rows($query);
if($numrows>0)
{
while($row = mysql_fetch_assoc($query))
{
$id= $row['id'];
$title= $row['title'];
$description= $row['description'];
$keywords= $row['keywords'];
$link= $row['link'];
echo "<div style=''><h2><a href='$link'>$title</a></h2>
$description</div> <hr><br/> <br/>";
}
}
else
{
echo"No results found for \"<b>$k</b>\"";
}
//disconnect
mysql_close();
}
}
?>
以上是 php 代码,代码在 mysql 数据库中搜索数据库并显示适当的结果......
但是当我在主页上输入前面有很多 space 的所需关键字并按搜索时,它会给出一条错误类型消息:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'keywords LIKE '%%' keywords LIKE '%%' keywords LIKE '%%' keywords LIKE '%%' keyw' at line 1 error"
我不知道该怎么办。我在谷歌上搜索了很多以寻找修复程序.....
图片
PHP 错误:
空白Space输入:
您的查询因 LIKE
子句中的空值而失败。
例如如果用户输入 book cover
您现有的查询将如下所示:
SELECT *
FROM search_table
WHERE keywords LIKE '%%'
OR keywords LIKE '%%'
OR keywords LIKE '%%'
OR keywords LIKE '%%'
OR keywords LIKE '%book%'
OR keywords LIKE '%%'
OR keywords LIKE '%cover%'
要解决此问题,请先 trim 值 $_GET['k']
。
$k = trim($_GET['k']);
然后,过滤掉空白值,以防用户在单词之间添加多个空格。
$terms = explode(" ", $k);
$terms = array_filter($terms);
现在,您的查询将是
SELECT *
FROM search_table
WHERE keywords LIKE '%book%'
OR keywords LIKE '%cover%'
您收到的错误是由于 OR
未包含在您的 SQL 查询中。因此,错误中的 SQL 是 keywords LIKE '%%' keywords LIKE '%%' keywords LIKE '%%' keywords LIKE '%%'
(没有 OR
)。这样做的原因是您在循环中 $i++
之前设置 $i=0
。因此 $i
始终为 1,并且永远不会附加包含 OR
的字符串。在循环外设置 $i=0
。
出现错误消息是因为 $i=0;
在 内部 循环中。把它移到外面。
同时避免使用空白字符串。
以下是我找到的构建 WHERE
子句的更好方法:
$ors = array();
foreach ...
{
if (...)
$ors[] = 'keywords LIKE ...'
}
$or_str = implode(' OR ', $ors);
我发现这比对 OR
或 AND
列表中的第一项或最后一项进行特殊封装更简单。
与此同时,您应该考虑使用 FULLTEXT
而不是一堆 LIKEs
。