php - 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();
解决方案
回答如何读取整个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))
推荐阅读
- c# - Twilio 在没有请求状态的情况下以进行中响应?
- spring-boot - 从 Keycloak 权限自定义 ui
- typescript - 打字稿动态推断类型
- javascript - Node Express Res 发送文件
- c++ - 错误:无法转换 'std::complex
' 到 '__complex__ float' 在初始化 - bash - Bash Diff 忽略一行的更改
- python - 基于Python中的索引列表减去文本文件中的字符串
- visual-studio-extensions - Visual Studio 扩展中的 app.config?
- javascript - 如何在 NextJS 应用程序中从 Apollo 链接上下文访问 Express HTTP 请求?
- c# - 如何实现此事件以更新另一个表单上的文本框?