Вам не нужно перенаправлять. Вам необходимо сопоставить все запросы с одним контроллером / действием.
get '/(*all)', to: 'home#app'
Внутри этого действия проверьте, что входит в параметры и предоставьте соответствующий вид.
PS: он будет захватывать все запросы, даже для не найденных изображений, js и т. Д.
Сборка одного оператора 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 внешнему массиву.
Ну, вы не хотите выполнять 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);
В зависимости от вашего источника данных заполнение массива может быть таким же простым, как открытие файла и выгрузка содержимого в массив с помощью файл ()
.
Вы всегда можете использовать 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
.
Вы можете подготовить запрос для вставки одного из них. строка с использованием класса 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).