php - 如何使用 php 加载 txt 文件并循环内容以查询数据库

标签 php mysql

我有一段代码无法正常工作。我正在尝试循环遍历一个大约 1k 行的 txt 文件,每行都有一个文件名。然后将每个文件名循环到 mysql 查询中,如果该文件名匹配,则从表中删除一行。

<?php 
$handle = fopen("corrupt.txt", "r");
$link = mysqli_connect("localhost", "user", "pass", "listings"); 

if ($handle) {
    while (($line = fgets($handle)) !== false) {
        if($link === false){ 
            die("ERROR: Could not connect. " . mysqli_connect_error()); 
        } 
        $sql = "DELETE FROM images WHERE images_file_name like $line"; 
        if(mysqli_query($link, $sql)){         
        }  
        else{ 
            echo "ERROR: Could not able to execute $sql. "  
            . mysqli_error($link); 
        } 
        mysqli_close($link); 
    }
} else {

} 
fclose($handle);
?>

最佳答案

第一:始终避免在循环内进行 mysql 查询。

// get data as an array
$file = file('data.txt');    

// check if datasource has at least one line
if(count($file) > 0){

 // create delete-array
 $delete = array();

 // loop trough each array element
 foreach($file as $line){
  // trim current line
  $line = trim($line);
  // check if line is not empty
  if(!empty($line)){
   // add line to delete-array
   $delete[] = $line;
  }
 }

 // check if delete-array contains at least one item
 if(count($delete > 0)){
  // delete the items in the array from the database
  mysqli_query($link, "DELETE FROM records WHERE filename IN('".implode("','", $delete)."'") or die(mysqli_error($link));
 }

}

如果数据源不是你自己的,你也应该使用mysqli_real_escape_string();在进行查询之前转义数据。

关于php - 如何使用 php 加载 txt 文件并循环内容以查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54434886/

相关文章:

Linux 上的 php 和 mysql 安装

php - 如何用数据库中的数据填充复选框?

php - mssql 中的 php time() 等价物是什么?

php - 在MySql中存储每小时更新的数据

php - 将数据数组传回服务器的最佳方式(在发布时)?

php - Jquery 使用 PHP 和 MySQL 根据一个字段自动补全两个字段

MySQL无法识别时区: Australia/Eucla (GMT+08:45)

MySQL SELECT 里面有另一个 SELECT

php - 如何使用 MySQL 和 PHP 检查数据库中是否列出了某个值?

mysql - GROUP_CONCAT 字符串问题