我正在尝试在我的网站上进行搜索,但由于某种原因,我的SELECT查询在执行时交换了关键字和列名的名称。以下是我的查询代码:
if(empty($_POST)=== false){
$output = '';
$error = '';
$input = $_POST['search_input'];
$i=0;
if($input){
$keyword = explode(" ", $input);
require ('core/dbconnection.php');
//If a user is logged in check if the user is Admin or Customer.
if(isset($_SESSION['userid'])){
if($admin == 1){
//enter admin code here
}
}else{
//If user is not logged in search items table only.
$search_items = "SELECT * FROM fyp_items WHERE ";
foreach($keyword as $k){
$i++;
if($i == 1){
$search_items .= "name LIKE $k OR description LIKE $k";
}else
$search_items .= " OR name LIKE $k OR description LIKE $k";
}
$item_qry = mysql_query($search_items)or die(mysql_error());
}
}else
$error = '<p class="pageerror">Please enter your search terms.</p>';
$search_items
正在连接搜索查询,然后由$item_query
执行。
所以我搜索了“conwerse”并回显了我得到以下$search_items
变量:
http://awesomescreenshot.com/0302ft5mc3
然而,当我运行查询时,我得到了这个mysql_error ...... http://awesomescreenshot.com/0552ft6bb4
似乎在我运行查询时交换关键字和列名称。我的数据库表是InnoDB&gt;的类型。我非常感谢你的帮助!
答案 0 :(得分:2)
首先,不要使用mysql_query,因为不推荐使用所有mysql_函数。使用mysqli或pdo。
其次,使用mysql_escape_string();
转义关键字,例如
$k = mysql_real_escape_string($k);
第三,当你回复它时,你的查询需要看起来像这样:
SELECT * FROM fyp_items WHERE `name` LIKE 'conwerse' OR `description` LIKE 'conwerse';
还有更多,但这应该让你开始。