如何用MYSQLI查询列值包含于指定URL变量的记录?反向通配符用法
方案1(推荐:PHP解析后查询,性能高、逻辑清晰)
你提到的不能用substr/str_replace手动截取字符串,我们可以用PHP官方内置的URL解析函数parse_url实现域名提取,不属于手动硬编码截取的范畴:
// 提取站点URL中的域名部分 $site_url = "https://joestire.com/about/our-team"; $target_domain = parse_url($site_url, PHP_URL_HOST); // 预处理查询,避免SQL注入 $pdo = new PDO("mysql:host=你的数据库地址;dbname=你的库名;charset=utf8mb4", "账号", "密码"); $stmt = $pdo->prepare("SELECT ID FROM customer_urls WHERE URL = ?"); $stmt->execute([$target_domain]); $matched_id = $stmt->fetchColumn();
查询到的$matched_id就是对应的域名记录ID。
方案2(纯SQL层面匹配,不需要提前解析域名)
如果确实需要直接在SQL中完成匹配,可以用LIKE拼接匹配规则,替代你写错的IN语法:
SELECT ID FROM customer_urls WHERE -- 匹配带路径的URL 比如https://xx.com/xxx ? LIKE CONCAT('%://', URL, '/%') -- 匹配根路径的URL 比如https://xx.com OR ? LIKE CONCAT('%://', URL)
执行查询时传入两次$site_url作为预处理参数即可。
原语句错误原因
IN语法用于匹配值列表,比如WHERE URL IN ('joestire.com', 'peterstire.com'),你直接传入完整URL字符串既不符合IN的语法要求,也没有匹配逻辑,自然无法运行。
内容的提问来源于stack exchange,提问作者Trey Tyler
相关产品推荐
相关产品推荐

