вставьте несколько строк через массив php в mysql

Вам не нужно перенаправлять. Вам необходимо сопоставить все запросы с одним контроллером / действием.

get '/(*all)', to: 'home#app'

Внутри этого действия проверьте, что входит в параметры и предоставьте соответствующий вид.

PS: он будет захватывать все запросы, даже для не найденных изображений, js и т. Д.

126
задан Danish Ali 7 June 2018 в 12:57
поделиться

4 ответа

Сборка одного оператора INSERT с несколькими строками намного быстрее в MySQL, чем один оператор INSERT на строку.

Тем не менее, это звучит как у вас могут возникнуть проблемы с обработкой строк в PHP, что на самом деле является проблемой алгоритма, а не языка. В основном, при работе с большими строками вы хотите минимизировать ненужное копирование. Прежде всего, это означает, что вы хотите избежать объединения. Самый быстрый и наиболее эффективный способ памяти для создания большой строки, например, для вставки сотен строк в одну, - это воспользоваться функцией implode () и назначением массива.

$sql = array(); 
foreach( $data as $row ) {
    $sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';
}
mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));

Преимущество этого подход заключается в том, что вы не копируете и не переписываете SQL-оператор, который вы до сих пор собирали, с каждой конкатенацией; вместо, PHP делает это один раз в операторе implode () . Это большой выигрыш .

Если вам нужно собрать много столбцов, и один или несколько очень длинных, вы также можете построить внутренний цикл, чтобы сделать то же самое и использовать implode () , чтобы присвоить предложение values ​​внешнему массиву.

226
ответ дан 24 November 2019 в 00:50
поделиться

Ну, вы не хотите выполнять 1000 вызовов запросов, но делать это хорошо:

$stmt= array( 'array of statements' );
$query= 'INSERT INTO yourtable (col1,col2,col3) VALUES ';
foreach( $stmt AS $k => $v ) {
  $query.= '(' .$v. ')'; // NOTE: you'll have to change to suit
  if ( $k !== sizeof($stmt)-1 ) $query.= ', ';
}
$r= mysql_query($query);

В зависимости от вашего источника данных заполнение массива может быть таким же простым, как открытие файла и выгрузка содержимого в массив с помощью файл () .

5
ответ дан 24 November 2019 в 00:50
поделиться

Вы всегда можете использовать mysql LOAD DATA :

LOAD DATA LOCAL INFILE '/full/path/to/file/foo.csv' INTO TABLE `footable` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' 

для массовых вставок, а не кучу операторов INSERT .

7
ответ дан 24 November 2019 в 00:50
поделиться

Вы можете подготовить запрос для вставки одного из них. строка с использованием класса mysqli_stmt, а затем перебрать массив данных. Примерно так:

$stmt =  $db->stmt_init();
$stmt->prepare("INSERT INTO mytbl (fld1, fld2, fld3, fld4) VALUES(?, ?, ?, ?)");
foreach($myarray as $row)
{
    $stmt->bind_param('idsb', $row['fld1'], $row['fld2'], $row['fld3'], $row['fld4']);
    $stmt->execute();
}
$stmt->close();

Где 'idsb' - это типы данных, которые вы связываете (int, double, string, blob).

20
ответ дан 24 November 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: