gpt4 book ai didi

php - 将文件夹中的文件名列表插入 mysql

转载 作者:行者123 更新时间:2023-11-29 23:09:00 25 4
gpt4 key购买 nike

我从文件夹中检索文件名列表,并需要使用 php 将其插入到 mysql 数据库中。

我插入数据库,它开始构建并且不会停止。文件夹中只有大约 20 个项目,但它不断循环到数据库中:

<?php
$directory = "/xml/";
$results_array = array();

if(is_dir($directory)) {
if($handle = opendir($directory)){
while(($file = readdir($handle)) !== false) {
$results_array[] = $file;
}
closedir($handle);
}
}
foreach($results_array as $value) {
$e_get = substr($value, 0, 16);
$edate = substr($e_get, -6);
$checkDB = $pdo->query("select `dateString` from `report`");
$checkDB->fetchAll();
foreach($checkDB as $checkItems){
if($checkItems->dateString != $edate) {
$pdo->query("insert into `report`(`dateString`) values
('$edate');
}
}
}

现在我正在尝试一种不同的方式,但我只得到一个项目:

<?php
$directory = "/xml/";
$results_array = array();

if(is_dir($directory)) {
if($handle = opendir($directory)){
while(($file = readdir($handle)) !== false) {
$results_array[] = $file;
}
closedir($handle);
}
}
$edate = array();
foreach($results_array as $value) {
$e_get = substr($value, 0, 16);
$edate[] = substr($e_get, -6);
}
foreach($edate as $date) {
$checkDB = $pdo->query("select `dateString` from `report`");
foreach($checkDB as $checkItems) {
if($checkItems->dateString != $date) {
$pdo->query("insert into `report`(`dateString`) values
('$edate');
}
}
}

请帮忙...谢谢!

最佳答案

我假设代码的第一部分正确填充$edate。之后,您不必要地读取数据库,并且在第二个查询中使用了 $edate,而不是 $date

因为数据库应该检查唯一性,所以你只需要这个:

foreach($edate as $date) {
$pdo->query("insert ignore into `report`(`dateString`) values ('$date')";
}

(INSERT IGNORE 插入一个新条目,或者在检测到无效请求时忽略它,例如 UNIQUE 列中的重复项。)

但是,这不会发现任何语法或可能发生的其他错误,因此您需要添加一些错误检查。我的建议:

// Just after you open the PDO connection, set PDO to
// throw an exception in the event of an error
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

// Then...
try {
foreach($edate as $date) {
$pdo->query("insert ignore into `report`(`dateString`) values ('$date')";
}
} catch(PDOException $e) {
echo 'Database error '.$e->getCode().': '.$e->getMessage();
exit(1);
}

您可以以不同的方式处理异常,或者不费心在此处捕获它并让默认异常处理程序捕获它(如果有的话)。

注意:您可以通过内爆 $edate 数组在单个 INSERT 中完成此操作。

// No loop required
$query = "insert ignore into `report`(`dateString`) values ('" . implode("'),('",$edate) . "')";
$pdo->query($query);

安全性:我假设您对目录中的文件名有一定的控制权,并且可以安全地以这种方式使用它们。如果没有,则此代码中很容易受到 SQL 注入(inject)的影响。您需要对值使用 PDO::quote() ,或者更好的是,切换到准备好的语句。

关于php - 将文件夹中的文件名列表插入 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28160604/

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