gpt4 book ai didi

php - 将 HTML 标签解析为 PDO MySQL

转载 作者:行者123 更新时间:2023-11-29 16:43:44 24 4
gpt4 key购买 nike

我的代码是使用正则表达式解析 HTML 标签,并将所有链接作为数组存储在数据库中

我的代码有问题,我不知道如何修复它以保存 MySQL 中的链接

我看到此错误消息错误:SQLSTATE[HY093]:参数号无效:列/参数从 1 开始

try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$domain = "https://google.com";
$input = @file_get_contents($domain) or die("Could not access file: $domain");
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
foreach($matches as $match) {
$url=$match[2];
// $match[2] = link address
// $match[3] = link text
}
}
$rows = array($domain, $url);
$stmt = $conn->prepare("INSERT INTO linkss(id, domain, url)
VALUES (NULL, :domain, :url)");
foreach($rows as $key => $value){
$stmt->bindParam($key, $value);
}
$stmt -> execute();
echo "New records created successfully";
}
catch(PDOException $e){
echo "Error: " . $e->getMessage();
}
$conn = null;

最佳答案

将数据传递给准备好的语句的方式不正确,您使用数组的索引 - 这是一个基于 0 的数字索引数组。这就是您收到错误的原因。虽然不确定为什么需要这个数组...

$rows = array($domain, $url);

相反,我建议使用...

$stmt = $conn->prepare("INSERT INTO linkss(id, domain, url) 
VALUES (NULL, :domain, :url)");
foreach($url as $value){
$stmt->bindParam(':domain', $domain);
$stmt->bindParam(':url', $value);
$stmt -> execute();
}

这还应该为每个 URL 而不是最后一个 URL 插入一条记录,因为 execute() 位于循环内。

更新:

您还需要修改构建 URL 列表的代码,这之前一直覆盖最后一个 URL,这将创建所有 URL 的列表...

$url = array();
foreach($matches as $match) {
$url[]=$match[2];
}

关于php - 将 HTML 标签解析为 PDO MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53207840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com