MySql Reverse LIKE子句

时间:2014-05-11 06:09:50

标签: php mysql sql

我在urls表格中列出了以下格式列出的白名单

---domain---
website1.com
website2.com
website3.com
website4.com

PHP变量$url由以下URL组成:

http://www.website2.com/path/tp/some/file.php

因此,我想检查$url是否属于白名单。这是我写的查询(反向LIKE子句)。但是,它的语法不正确

mysql_query("SELECT id FROM urls WHERE '".$url."' LIKE %domain%")or die(mysql_error());

有没有办法在单个查询中实现这一目标?

4 个答案:

答案 0 :(得分:1)

我想这是你要使用的列名。

$url = 'http://www.website2.com/path/tp/some/file.php';
$parse = parse_url($url);


mysql_query("SELECT if( count(id) > 0, true, false ) as whitelisted FROM urls WHERE domain = '".$parse['host']."'")or die(mysql_error());

如果$ parse ['host']在表中,那么这个小if语句和计数将确保你在查询时得到一个真/假值,如$ array [“whitelisted”]。 / p>

答案 1 :(得分:1)

不是那么容易我想为什么你不使用PHP来获取$url的域名部分?

像:

<?php
$url='http://www.website2.com/path/tp/some/file.php';
$aurl=parse_url($url);
echo '<pre>';
print_r($aurl);

/* //output will be like this.
Array
(
    [scheme] => http
    [host] => www.website2.com
    [path] => /path/tp/some/file.php
)
*/
$host=$aurl['host']
?>

您可以通过以下方式查询:

$query="SELECT id FROM urls WHERE domain LIKE '%{$host}%'";

答案 2 :(得分:0)

看起来您只想搜索您拥有的网址的域名。尝试这样的事情:

$url = "http://www.website2.com/path/tp/some/file.php";

$urlInfo = parse_url($url); // this is a standard PHP function, see php.net/parse_url

$domain = $urlInfo['host'];

$mysqli = new mysqli("localhost", "my_user", "my_password", "my_database");

$stmt = $mysqli->prepare("SELECT * FROM urls WHERE domain LIKE ?");
$stmt->bind_param("s", "%" + $domain + "%");
$stmt->execute();

此示例仅从您的网址中提取域名并使用它进行搜索。它也使用mysqli,你应该尝试使用mysqli而不是mysql函数(不推荐使用)。使用代码片段进行实际查询将如下所示:

mysql_query("SELECT id FROM urls WHERE domain LIKE '%{$domain}%'");

此外,由于您的表包含域名,因此您甚至可能不需要使用LIKE=就足够了。

答案 3 :(得分:0)

我认为您正在寻找CONCAT语法

mysql_query("SELECT id FROM urls WHERE '".$url."' LIKE CONCAT('%', domain, '%')")or die(mysql_error());

然后你可以检查查询是否返回任何结果。