如何在查询中使用LIKE和_?

时间:2012-07-19 16:21:52

标签: php sql

我有一个包含数千个URL的sql数据库。并且我不断使用php5在Url中进行任何修改来更新它。

现在,我想只添加数据库中不存在的url,我通过使用此sql查询检查数据库来执行此操作

$q = $urlToCheck;
SELECT * FROM pligg WHERE rawUrl LIKE '$q%'

问题是,已经在数据库中的一些Url就像

http://example.com/a_b_c.html
http://example.com/a1b1c.html

如果我运行查询

$q = 'http://example.com/a_b';
SELECT * FROM pligg WHERE rawUrl LIKE '$q%'

然后它将返回两个Urls。我想只返回完全匹配的Url。所以,我想只得到这个网址

http://example.com/a_b_c.html

任何帮助?

1 个答案:

答案 0 :(得分:5)

对于 MySQL ,您需要转义_;它应该是\_。对于 MSSQL ,它应该是[_]

修改
_上的Here's the manual page以及MySQL的%_转义的通配符。如果愿意,您可以实际指定转义字符。

$q = 'http://example.com/a_b';
$qescaped = str_replace('_', '\_', $q);

$result = my_execute_query_function($qescaped);

Here's the manual page用于MSSQL。

$qescaped = str_replace('_', '[_]', $q);

(另外:MSSQL还允许你指定转义字符(我不知道))。

PostgreSQLOracle等其他RDBMS可能有自己的转义字符和/或指定它们的方式。检查各自的手册页(为方便起见,链接)。