我在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());
有没有办法在单个查询中实现这一目标?
答案 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());
然后你可以检查查询是否返回任何结果。