我想创建一个目录,您可以根据您提供的参数进行搜索。 naam是产品的名称,woord是给定的字符。稍后在脚本中,我将这部分查询粘贴到第一部分。我不能让我喜欢的查询工作
谢谢
if(strlen($whereQuery) > 0)
$whereQuery .= 'AND naam LIKE '%'.$woord.'%'';
else
$whereQuery = 'WHERE naam LIKE '%'.$woord.'%'';
我想创建一个目录,您可以根据您提供的参数进行搜索。 naam是产品的名称,woord是给定的字符。稍后在脚本中,我将这部分查询粘贴到第一部分。我不能让我喜欢的查询工作
谢谢
if(strlen($whereQuery) > 0)
$whereQuery .= 'AND naam LIKE '%'.$woord.'%'';
else
$whereQuery = 'WHERE naam LIKE '%'.$woord.'%'';
我宁愿使用双引号,以避免混乱,
或简单地说,
if(strlen($whereQuery) > 0)
$whereQuery .= " AND naam LIKE '%$woord%' ";
else
$whereQuery = " WHERE naam LIKE '%$woord%' ";
一点题外话,查询很容易受到SQL Injection
的影响如果变量的值(s)来自外部。请看下面的文章,了解如何防止它。通过使用PreparedStatements
你可以摆脱使用单引号围绕值。
或者只是:'$ whereQuery =“其中naam LIKE'%$ woord%'';'因为你在双引号中,无论如何... – Neal 2013-02-20 15:44:21
@Neal好点。 – 2013-02-20 15:45:32
这不会工作,因为您有额外的单引号 – 2013-02-20 15:47:06
你需要逃脱是查询的一部分引号:
if(strlen($whereQuery) > 0)
$whereQuery .= 'AND naam LIKE \'%'.$woord.'%\'';
else
$whereQuery = 'WHERE naam LIKE \'%'.$woord.'%\'';
或者使用单引号和双引号的混合。
使用双引号。
或者逃脱单引号。
也请不要做你现在正在做的事情。
Don't use mysql_*
functions in new code。他们不再维护and are officially deprecated。请参阅red box?请改为了解prepared statements,并使用PDO或MySQLi - this article将帮助您决定哪个。如果您选择PDO,here is a good tutorial。
任何使用颜色编码的编辑器都会立即向您显示问题。只要看看你的代码就可以了。
试试这个:
$whereQuery = ($whereQuery ? $whereQuery." AND" : " WHERE")." naam LIKE '%".$woord."%'";
这避免重复整个 “LIKE” 部分两次)
此外,还要确保你已经正确转义$woord
。在这种情况下,mysql_real_escape_string
是不够的。您还需要通过preg_replace("/[%_]/","\\$1",$woord);
运行它以在WHERE子句中转义特殊字符。
究竟是什么问题?标题没有提供任何信息,也没有提供实际的问题。 – Woot4Moo 2013-02-20 15:43:34
“你无法工作”是什么意思?预期的结果是什么,你得到了什么?你有什么错误吗? – rcdmk 2013-02-21 00:47:10