PHP逐行读取文件,声明为变量,然后在MySQL查询中使用WHERE column_name等于变量



您好,我使用脚本(概述(的目的是让PHP逐行读取文本文件,然后将该行声明为变量,该变量将在MySQL语句中用作数组中的where子句,然后最终写入另一个文本文件。

代码:

$lines = file('/root/prcode');
foreach($lines as $line) {
$query = "select * from $db_table where code=$line";
$result = mysqli_query($conn,$query);
while($row = mysqli_fetch_array($result, MYSQLI_NUM)) {
$out = "$row[0],$row[1],$row[2],$row[3],$row[4],$row[5],$row[6],$row[7],
$row[8],$row[9],$row[10],$row[11],$row[12],n";
//file_put_contents($outfile, $out);
//$fp = fopen($outfile, 'w');
//fwrite($fp, $out);
//fclose($fp);
echo $out;
//echo $line;
//echo $query;
//echo $result;
//echo $row;
};
}

文件prcode的前10行:

60025909170
*
.05005140160
0000000000000000
0000000000000001
0000000000000004
0000000000000005
0000000000000007
0000000000000010
0000000000000011

从Linux shell运行脚本时输出:

0010,0000,60025909170,01,,,,,,,,,,
0010,0000,60025909170,02,,,,,,,,,,
0010,0000,60025909170,03,,,,,,,,,,
0010,0000,60025909170,04,,,,,,,,,,
0010,0000,60025909170,05,,,,,,,,,,
0010,0000,60025909170,06,,,,,,,,,,
0010,0000,60025909170,07,4.000,36.960,-4.000,-36.960,,,,,,
0010,0000,60025909170,08,4.000,36.960,,,,,,,,
0010,0000,60025909170,09,4.000,36.960,,,,,,,,
0010,0000,60025909170,10,4.000,36.960,,,,,,,,
0010,0000,60025909170,11,4.000,36.960,,,,,,,,
0010,0000,0000060025909170,01,,,,,,,,,,
0010,0000,0000060025909170,02,,,,,,,,,,
0010,0000,0000060025909170,03,,,,,,,,,,
0010,0000,0000060025909170,04,,,,,,,,,,
0010,0000,0000060025909170,05,,,,,,,,,,
0010,0000,0000060025909170,06,,,,,,,,,,
0010,0000,0000060025909170,07,,,,,,,,,,
0010,0000,0000060025909170,08,,,,,,,,,,
0010,0000,0000060025909170,09,,,,,,,,,,
0010,0000,0000060025909170,10,-4.000,-.040,4.000,.040,,,,,,
0010,0000,0000060025909170,11,-4.000,-.040,,,,,,,,
0010,0000,60025909170,12,4.000,36.960,,,,,,,,
0010,0000,0000060025909170,12,-4.000,-.040,,,,,,,,

根据输出,可以确定没有遵循文本文件的顺序,因为600259091700000060025909170是两个不同的产品,并且0000060025909170在大约32000<-行我的第一个问题。为了纠正这一点,并满足以下顺序,我尝试了特殊字符和空格:

$query = "select * from $db_table where code='$line'";  \causes empty output
$query = "select * from $db_table where code="$line""; \causes empty output
$query = "select * from $db_table where code='$line'"; \empty output

下面的回声只是为了测试设置了哪些变量,或者不尝试进一步排除故障:

echo $out;
//echo $line;
//echo $query;
//echo $result;
//echo $row;

第二个问题是,向文件写入的尝试都不起作用,它要么只写一行,什么都不写,要么根本不写。

关于如何可能解决我的两个问题,有什么建议或指导吗?

第一期:很可能,您的文件正在按顺序读取,但您的查询正在查找所有这些行。您可以通过将行号添加到输出中来查看是否发生了这种情况。尝试将foreach更改为foreach($lines as $lineNum => $line) {,将输出更改为$out = $lineNum.implode(',', $row)."n";。如果60025909170和000006002590917的lineNum相同,则您知道查询与两者匹配。

第二个问题:您只需要将FILE_APPEND的标志添加到FILE_put_contents中。像这样:file_put_contents($outfile, $out, FILE_APPEND)

最新更新