gpt4 book ai didi

PHP 循环 INSERT MySQL 获取每个结果

转载 作者:行者123 更新时间:2023-11-29 18:16:08 26 4
gpt4 key购买 nike

我已经有一个脚本,可以使用简单的 HTML dom 抓取一个 csv 的所有 url。

输出如下:

CoolerMaster Devastator II Azul
<小时/>
Coolbox DeepTeam - Combo teclado, ratón y alfombrilla
<小时/>
Asus Claymore RED - Teclado gaming
<小时/>
INSERT INTO productos (nombre) VALUES('Asus Claymore RED - Teclado gaming')

Items added to the database!

INSERT INTO productos (nombre) VALUES('Asus Claymore RED - Teclado gaming')

Items added to the database!

INSERT INTO productos (nombre) VALUES('Asus Claymore RED - Teclado gaming')

Items added to the database!

正如您所看到的,抓取内容包含 3 个不同的产品,但是当我尝试插入到 MySQL 数据库时,它只保存最后一个产品 --- 但保存了 3 次。

在这里你可以看到我的 PHP 代码:

<?php

require 'libs/simple_html_dom/simple_html_dom.php';
set_time_limit(0);

function scrapUrl($url)
{
$html = new simple_html_dom();
$html->load_file($url);
global $name;
$names = $html->find('h1');
foreach ($names as $name) {
echo $name->innertext;
echo '<br>';
}

$rutaCSV = 'csv/urls1.csv'; // Ruta del csv.
$csv = array_map('str_getcsv', file($rutaCSV));
foreach ($csv as $linea) {
$url = $linea[0];
scrapUrl($url);
}
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
foreach ($csv as $linea) {
$url = $linea[0];
$sql = "INSERT INTO productos (nombre) VALUES('$name->plaintext')";
print ("<p> $sql </p>");
if ($conn->query($sql) === TRUE) {
echo "Items added to the database!";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$conn->close();
?>

所以,我需要的是 MySQL 查询添加:

INSERT INTO productos (nombre) VALUES('CoolerMaster Devastator II Azul')

Items added to the database!

INSERT INTO productos (nombre) VALUES('Coolbox DeepTeam - Combo teclado, ratón y alfombrilla')

Items added to the database!

INSERT INTO productos (nombre) VALUES('Asus Claymore RED - Teclado gaming')

Items added to the database!

最佳答案

您的代码中有很多问题。

  1. 首先,您有函数 scrapUrl,它接受 $url 作为参数,但不输出任何内容。它正在设置全局 $name 变量,但是,尽管它找到了多个名称,但它只将最后一个名称放入 $name 变量中,因为它正在遍历一系列 $names,将其文本放入 $name 中,然后查找下一个,因此,只有最后一项存储到您的 $name 变量中。

我建议您更改 scrapUrl 函数,以便它将抓取产品的名称存储到数组中,并返回该数组。

  • 其次,我无法理解您如何将数据放入 csv 文件中,您提供的代码看起来不应该正常工作。您确定在 csv 文件中写入正确的数据吗?也许您只是从文件中读取数据 - 在这种情况下,我很抱歉。

  • 第三种:您正在从 csv 读取数据,并且在循环中逐行移动时,但数据无处可去。在我看来,您应该将 $linea[0] 放入 SQL 查询中,但是当 $name 在 scrapUrl 中仅设置一次时,您将 $name->plaintext 放入其中,正如我上面提到的。

  • 我建议您在 SQL 查询中使用正确的变量来将数据传递给它。

    此外,最好使用 PDO 和准备好的语句,而不是在字符串文字 SQL 查询中插入原始数据。

    关于PHP 循环 INSERT MySQL 获取每个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47010924/

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