首页 > 解决方案 > PHP - 检查带有数据库的 csv 文件中是否存在值

问题描述

我需要帮助,我试图让这个工作,但我做不到。

我有一个自动更新的 CSV 文件,我需要检查 csv 上的数据是否被删除。

如果是,我还需要删除数据库中的这些数据。

为此,我将 csv 代码(以查看它是否与数据库值相差很大)放在 while 数据库循环中。

我不知道这是否是解决方案,但我希望你能帮助我找到解决方案。

这是完整的代码:

$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die("Connection failed: " . $conn->connect_error);        

$select_all_sku = "
  SELECT
      wp_postmeta.*, wp_posts.*
  FROM u779870322_y7MxR.wp_posts
  INNER JOIN u779870322_y7MxR.wp_postmeta 
        ON (wp_posts.ID = wp_postmeta.post_id) 
  WHERE wp_postmeta.meta_key='_fragrancex_item'";   
    
$read_all_sku = $conn->query($select_all_sku);
        
while($all_sku = $read_all_sku->fetch_assoc()) {
    $mm = $all_sku["meta_value"];
    $file_handle = fopen("test.csv", "r") or die("can't open");
    $c = 1;
    
    while (!feof($file_handle) ) {

        $line_of_text = fgetcsv($file_handle, 1024);
    
        if($c>1) {
            if ($line_of_text[0] == $mm) {
                $OK = "ok";
            }
        }
        $c++;
    }
        
    fclose($file_handle);

    if(isset($OK)) {
    
        $delete_query ="DELETE
            wp_postmeta.*, wp_posts.*
        FROM u779870322_y7MxR.wp_posts
        INNER JOIN u779870322_y7MxR.wp_postmeta 
            ON (wp_posts.ID = wp_postmeta.post_id) 
        WHERE 
            wp_postmeta.meta_key='_fragrancex_item' AND
            wp_postmeta.meta_value='$mm'";
     
      $conn->query($delete_query);
  } //if not found  
}//loop DB
        
$conn->close();

标签: phpdatabasecsvdelete-row

解决方案


回答如何读取整个csv然后循环

你已经在做。只需在遍历行之前执行此操作

$file_handle = fopen("test.csv", "r") or die("can't open");
$c = 1;
$values = []; // initialize an empty one dimension array
while (!feof($file_handle) ) {
    $line_of_text = fgetcsv($file_handle, 1024);
    if($c++ > 1) $values[] = $line_of_text[0]; // fill the array
}
fclose($file_handle);

现在您可以遍历行并检查

if (in_array($mm, $values))

推荐阅读