Есть ли более элегантный способ взломать данные для запроса? - PullRequest
0 голосов
/ 24 июля 2011

Я собираюсь спросить из-за этого ответа.

Мой код выглядит как

<?php
$lines = file('file.txt');
$count = count($lines);
$i = 0;
$query = "INSERT INTO table VALUES ";
foreach($lines as $line){
    $i++;
    if ($count == $i) {
        $query .= "('".$line."')";
    }
    else{
        $query .= "('".$line."'),";
    }
}
echo $query;

Есть ли более элегантный способ сделать это / функция в PHP

Ответы [ 4 ]

4 голосов
/ 24 июля 2011
foreach ( $lines AS $line )  
{  
  $query[] = "($line)";  
}  

echo  "INSERT INTO table VALUES " . implode(",",$query);

- это как сделать это с помощью взрыва, но я думаю, что AlienWebguy лучше

3 голосов
/ 24 июля 2011
foreach(file('file.txt') as $line){
    $query .= "('".$line."'),";
}
echo "INSERT INTO table VALUES " . rtrim($query,',');
3 голосов
/ 24 июля 2011
$query = 'INSERT INTO table VALUES ';
$query .= "('" . implode("'), ('", $lines) . "')";

UPD

Для 2 полей это может выглядеть так (я полагаю, вы используете php5 +):

$query = 'INSERT INTO table VALUES ';

$lines = array(array(1,2), array(3,4));
$query .= "('" . implode("'), ('", array_map(function($i) { return "'" . implode("', '", $i) . "'"; }, $lines)) . "')";

var_dump($query);
1 голос
/ 24 июля 2011

LOAD DATA INFILE лучше подходит для этой конкретной задачи: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

...