2013-02-20 46 views
-2

我想创建一个目录,您可以根据您提供的参数进行搜索。 naam是产品的名称,woord是给定的字符。稍后在脚本中,我将这部分查询粘贴到第一部分。我不能让我喜欢的查询工作

谢谢

if(strlen($whereQuery) > 0) 
    $whereQuery .= 'AND naam LIKE '%'.$woord.'%''; 
else 
    $whereQuery = 'WHERE naam LIKE '%'.$woord.'%''; 
+0

究竟是什么问题?标题没有提供任何信息,也没有提供实际的问题。 – Woot4Moo 2013-02-20 15:43:34

+0

“你无法工作”是什么意思?预期的结果是什么,你得到了什么?你有什么错误吗? – rcdmk 2013-02-21 00:47:10

回答

1

我宁愿使用双引号,以避免混乱,

​​

或简单地说,

if(strlen($whereQuery) > 0) 
    $whereQuery .= " AND naam LIKE '%$woord%' "; 
else 
    $whereQuery = " WHERE naam LIKE '%$woord%' "; 

一点题外话,查询很容易受到SQL Injection的影响如果变量的值(s)来自外部。请看下面的文章,了解如何防止它。通过使用PreparedStatements你可以摆脱使用单引号围绕值。

+1

或者只是:'$ whereQuery =“其中naam LIKE'%$ woord%'';'因为你在双引号中,无论如何... – Neal 2013-02-20 15:44:21

+0

@Neal好点。 – 2013-02-20 15:45:32

+0

这不会工作,因为您有额外的单引号 – 2013-02-20 15:47:06

0

你需要逃脱是查询的一部分引号:

if(strlen($whereQuery) > 0) 
    $whereQuery .= 'AND naam LIKE \'%'.$woord.'%\''; 
else 
    $whereQuery = 'WHERE naam LIKE \'%'.$woord.'%\''; 

或者使用单引号和双引号的混合。

0

任何使用颜色编码的编辑器都会立即向您显示问题。只要看看你的代码就可以了。

试试这个:

$whereQuery = ($whereQuery ? $whereQuery." AND" : " WHERE")." naam LIKE '%".$woord."%'"; 

这避免重复整个 “LIKE” 部分两次)

此外,还要确保你已经正确转义$woord。在这种情况下,mysql_real_escape_string是不够的。您还需要通过preg_replace("/[%_]/","\\$1",$woord);运行它以在WHERE子句中转义特殊字符。