【问题标题】:MySQL SELECT statement only searched 3 fields in tableMySQL SELECT 语句只搜索了表中的 3 个字段
【发布时间】:2012-11-18 15:16:04
【问题描述】:

我在使用表单中的用户输入搜索 MySQL 数据库表中的多个列时遇到问题。

数据库中的表称为车辆,有 4 个字段/列:年份、品牌、型号和选项

用户从我放入 $input 变量的表单中输入他们的搜索条件。

下面是我的代码,它不起作用。它返回一个布尔错误:

(Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given)

$query = ("SELECT * FROM vehicles WHERE year LIKE '%$input%' OR make LIKE '%$input%' OR model LIKE '%$input%' OR option LIKE '%$input%'");

$result = mysql_query($query);

然而,当我从查询中删除最终的 OR 时,它可以正常工作,但只搜索年份、品牌和型号字段:

$query = ("SELECT * FROM vehicles WHERE year LIKE '%$input%' OR make LIKE '%$input%' OR model LIKE '%$input%'");

$result = mysql_query($query);

如何让查询搜索所有 4 个字段/列?我错过了什么?

是否有更简单的方法可以搜索整个表格(表格中的所有列)以查找用户的输入?

非常感谢您能给我的任何帮助。

【问题讨论】:

    标签: php mysql sql select


    【解决方案1】:

    “option”是mysql中的保留字,see here。因此,您的查询实际上失败并返回布尔值 false 而不是资源。重命名列或像这样在它周围使用``

    $query = ("SELECT * FROM vehicles WHERE year LIKE '%$input%' OR make LIKE '%$input%' OR model LIKE '%$input%' OR `option` LIKE '%$input%'");
    

    还要确保使用适当的转义来安全地对抗SQL Injection

    【讨论】:

    • 感谢您的快速回复!我将列更改为 EXTRA 而不是 OPTION,它就像一个魅力!我知道这很简单。谢谢一百万!
    • 不客气;)。请不要忘记将此标记为解决答案。
    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2015-09-08
    相关资源
    最近更新 更多