PHP читает из файла построчно, объявляет как переменную, затем использует в запросе MySQL как ГДЕ имя_столбца равно переменной

#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) ;