【发布时间】:2014-02-03 17:33:34
【问题描述】:
我正在尝试从 CSV 文件中读取项目列表,将其与我的数据库中的项目进行比较,然后生成一个包含不在我的基础中的项目的新项目。从具有一千个结果的 CSV 中,只有 26 个不在 db 中。但是,我的新 CSV 中的第一项存在于我的数据库中,这意味着它是误报。只有第一项是错误的,其他都很好(我都查询过了)。
这是我的代码:
<?php
function generate_diff_csv() {
$conn = new mysqli("localhost","rcpp","*********", "items");
$key_ref = fopen("INV14.csv", "r");
$not_in = fopen("not_in.csv","w");
[...]
fclose($key_ref);
$keys = array();
foreach ($custom1 as $custom) {
$trimmed_custom = trim($custom);
$result = $conn->query("SELECT custom1 FROM products WHERE custom1 = '{$trimmed_custom}'");
if($result->num_rows == 0) {
$keys[] = array("key" => $trimmed_custom);
echo "adicionado ao csv... \n";
}
}
foreach($keys as $key) {
fputcsv($not_in, $key);
}
fclose($not_in);
$conn->close();
}
generate_diff_csv();
为了确保一切正常,我创建了一个临时表,其中包含我需要比较的数据。当我用 SQL 查询它时,我得到 25 个结果。将它们(PHP x SQL)并排放在一个文件中,只有第一个不匹配,这意味着它确实是唯一错误的结果。
SELECT ref FROM refs WHERE ref NOT IN (SELECT custom1 FROM products);
这是为什么呢?为什么 PHP 在我的查询中返回第一个键?
PHP 正在从命令行 PHP 5.4.12 (Windows) 执行。我没有在 Linux 生产环境上测试过,但我不相信这会是一个特定于平台的问题。
提前谢谢你。
【问题讨论】:
-
首先,你使用
fputcsv($not_in...然后fclose($not_inlist)很奇怪——这是故意的,你没有关闭文件$not_in,或者这是一个错字? -
失败的名称是什么 - 例如,它可能被
trim破坏。在这种情况下,它不会出现,因为$trimmed_custom不存在,尽管$custom存在。 -
zebediah49,这是在发布前编辑代码时出现的拼写错误。我已经纠正了。谢谢你。并且 $trimmed_custom 不存在,即使它正在接收修剪后的 $custom ($trimmed_custom = trim($custom); )?键都是用点分隔的数字(即:01.04.0632)。