#php #mysql
#php #mysql
Вопрос:
Добрый день, моя цель со скриптом (обзор) — позволить 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 $resu<
//echo $row;
};
}
Первые 10 строк prcode файла:
60025909170
*
.05005140160
0000000000000000
0000000000000001
0000000000000004
0000000000000005
0000000000000007
0000000000000010
0000000000000011
ВЫВОД при запуске скрипта из оболочки Linux:
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,,,,,,,,
Из выходных данных можно установить, что порядок текстового файла не соблюдается, поскольку 60025909170
и 0000060025909170
являются 2 разными продуктами и 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;
Вторая проблема заключается в том, что ни одна из попыток записи в файл не сработала, он либо записал бы только одну строку и ничего больше, либо не записал бы вообще.
Любой совет или руководство о том, как, возможно, исправить мои 2 проблемы?
Ответ №1:
1-я проблема: скорее всего, ваш файл читается по порядку, но ваш запрос находит все эти строки. Вы можете увидеть, происходит ли это, добавив номер строки в свой вывод. Попробуйте изменить ваш foreach на foreach($lines as $lineNum => $line) {
и ваш вывод на $out = $lineNum.implode(',', $row)."n";
, если у вас одинаковое число строк для 60025909170 и 0000060025909170, тогда вы знаете, что запрос соответствует обоим.
2-я проблема: Вам просто нужно добавить флаг FILE_APPEND к file_put_contents. Вот так: file_put_contents($outfile, $out, FILE_APPEND)
;