我正在尝试创建一个目录,您可以在其中根据给出的参数进行搜索。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. "%' ";
或者简单地,
if(strlen($whereQuery) > 0)
$whereQuery .= " AND naam LIKE '%$woord%' ";
else
$whereQuery = " WHERE naam LIKE '%$woord%' ";
附带说明一下,如果变量的值(s)来自外部,那么查询就容易受到SQL Injection
的攻击。请看下面的文章来了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号的情况。
- 如何防止PHP中的SQL注入
使用双引号。
或者转义单引号。
此外,请不要做你目前正在做的事情。
不要在新代码中使用mysql_*
函数。它们不再被维护,并被正式弃用。是否看到红框?了解准备好的语句,并使用PDO或MySQLi-本文将帮助您决定哪一个。如果你选择PDO,这里有一个很好的教程。
您需要转义作为查询一部分的引号:
if(strlen($whereQuery) > 0)
$whereQuery .= 'AND naam LIKE ''%'.$woord.'%''';
else
$whereQuery = 'WHERE naam LIKE ''%'.$woord.'%''';
或者使用单引号和双引号的组合。
任何带有颜色编码的编辑器都会立即向您显示问题。只需查看问题中的代码即可。
试试这个:
$whereQuery = ($whereQuery ? $whereQuery." AND" : " WHERE")." naam LIKE '%".$woord."%'";
这样可以避免重复整个"LIKE"部分两次;)
此外,请确保已正确逃离$woord
。在这种情况下,mysql_real_escape_string
是不够的。您还需要通过preg_replace("/[%_]/","''$1",$woord);
运行它来转义WHERE子句中的特殊字符。