我尝试使用MySQL和&amp ;;在同一个表中的多个列中搜索多个关键字PHP。
我得到的当前错误是: 警告:mysql_fetch_assoc()期望参数1是资源,布局在第66行的......中给出
我在下面的第66行标注了评论。
我已经阅读了大约15个帖子,到目前为止我无法找到解决方案。任何帮助将不胜感激!
数据库表:
**Table Name:** coffee
**Field: Type:**
name varchar(255)
digs int(10)
roaster varchar(255)
roastlevel varchar(255)
flavor varchar(255)
price varchar(255)
description text
HTML:
<form class="navbar-form searchbox" action="search.php" role="search">
<div class="input-group">
<input type="text" class="form-control" placeholder="Enter Coffee Name" name="term" id="srch-term">
<div class="input-group-btn">
<button class="btn btn-default" type="submit" value="search">
<span class="glyphicon glyphicon-search"></span>
</button>
PHP(来自search.php)
<?php
if (empty($_GET['term']) === false){
$search_results = search_posts($_GET['term']);
if (empty($search_results)){
echo 'Your search returned no results.';
}
foreach ($search_results as $result){
$string = preg_replace('/\s+/', '', $result['title']);
echo "<a href='{$string}-profile.php'>
<h4>{$result['title']} </h4></a>";
}
}
function search_posts($term){
$keywords = preg_split('#\s+#', mysql_real_escape_string($term));
$name_where = "'name' LIKE '%" . implode("%' OR 'name' LIKE '%", $keywords) . "%'";
$roaster_where = "'roaster' LIKE '%" . implode("%' OR 'roaster' LIKE '%", $keywords) . "%'";
$roastlevel_where = "'roastlevel' LIKE '%" . implode("%' OR 'roastlevel' LIKE '%", $keywords) . "%'";
$flavor_where = "'flavor' LIKE '%" . implode("%' OR 'flavor' LIKE '%", $keywords) . "%'";
$description_where = "'description' LIKE '%" . implode("%' OR 'description' LIKE '%", $keywords) . "%'";
$sql = "SELECT
'name',
'roaster',
'roastlevel',
'flavor',
LEFT('description'), 100)
FROM 'coffee'
WHERE {$name_where}
OR {$roaster_where}
OR {$roastlevel_where}
OR {$flavor_where}
OR {$description_where}";
$result = mysql_query($sql);
$results = array();
while (($row = mysql_fetch_Assoc($result)) !== false){ /*Line 66*/
$results[] = $row;
}
return $results;
}
?>
答案 0 :(得分:2)
根据 b0s3 的建议,请勿在列名称周围添加撇号。 试试这个来解决当前的问题:
$sql = "SELECT
name,
roaster,
roastlevel,
flavor,
LEFT(description), 100)
FROM coffee
WHERE {$name_where}
OR {$roaster_where}
OR {$roastlevel_where}
OR {$flavor_where}
OR {$description_where}";
即使在你的where变量中,也要避免使用带有列名的撇号。
此外,您使用的是LEFT('description'), 100)
,它的作用是尝试从单词description
中提取前100个字符。如果您想从列中提取,请不要在那里使用任何撇号。
是的,我会支持关于使用PDO的其他意见。请参阅评论中 Tim Ogilvy 分享的内容。
答案 1 :(得分:0)
如果连接到数据库,您没有连接到数据库使用pdo或mysqli: mysql_query中的错误($ sql, - &gt; $ connection&lt; - ); mysql_fetch_Assoc($结果, - &GT; $连接);
查找: 使用搜索谷歌
<div id="searchbar" class="left">
<form method="get" action="http://www.google.com/search" target="_blank" >
<input type="hidden" name="sitesearch" value="your site" />
<input type="hidden" name="domains" value="your site" />
<input type="hidden" value="fa" name="hl" />
<input name="ie" value="UTF-8" type="hidden" />
<input name="oe" value="UTF-8" type="hidden" />
<input type="text" class="s-field right" name="q" />
</form>