【问题标题】:PHP - check if a value not existing in the csv file with databasePHP - 检查带有数据库的 csv 文件中是否存在值
【发布时间】:2021-01-12 03:37:02
【问题描述】:

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

我有一个自动更新的 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();

【问题讨论】:

  • 请对您的代码进行一些格式化,以便阅读
  • 我不明白,为什么不可读?你不明白什么?,我的代码很清楚。您有第一部分 = 选择 db,然后您在 csv 文件中进行搜索。
  • 在 Slava Rozhne 格式化之前完全无法阅读。
  • 首先感谢 Slava Rozhne 格式化代码,我从 DW 复制过去,这是我的第二个帖子,现在我知道下次该做什么了。关于我的代码有人有解决方案吗?我找到了使用会话的解决方案。该会话将在接下来单独收集数据,它将在 csv 循环中与其他会话进行 1 个会话,这解决了我的问题,但如果这是个好主意,则不能解决 Shure。
  • 问题 1:为什么需要为每一行读取整个 csv?你为什么不只读一次,将所需的变量存储在一个数组中,然后遍历你的行并检查数组?问题2:在我看来,一旦 $ok=1; $ok 将始终设置

标签: php database csv delete-row


【解决方案1】:

解答如何读取整个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))

【讨论】:

  • 它工作正常,我做了一些更改,但您的代码可以正常工作。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 2016-03-01
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2018-08-04
  • 2016-10-20
相关资源
最近更新 更多