-2

我正在尝试创建一个目录,您可以在其中根据您提供的参数进行搜索。naam 是产品的名称,而 wood 是给定的字符。稍后在脚本中,我将查询的这一部分粘贴到第一部分。

谢谢

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

4 回答 4

1

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

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,您可以摆脱在值周围使用单引号。

于 2013-02-20T15:42:28.500 回答
1

使用双引号。

或转义单引号。


也请不要做你目前正在做的事情。

不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2013-02-20T15:42:43.137 回答
0

您需要转义作为查询一部分的引号:

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

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

于 2013-02-20T15:42:42.957 回答
0

任何带有颜色编码的编辑器都会立即向您显示问题。只需查看问题中的代码即可。

试试这个:

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

这样可以避免重复整个“LIKE”部分两次;)

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

于 2013-02-20T15:46:32.400 回答