uploadify php mysql - массовая загрузка и массовая вставка - PullRequest
0 голосов
/ 27 мая 2011

Я использую uploadify для загрузки изображений на сервер. Back end Я использую PHP-скрипт. В сценарии PHP я вставляю местоположение файла и некоторые другие детали в базу данных в дополнение к копированию в целевое местоположение.

Проблема: - Если я загружаю 20 файлов, сценарий PHP вызывается 20 раз, а оператор вставки базы данных вызывается 20 раз для вставки для разных изображений. Определенно, вызов базы данных 20 раз - неэффективный способ сделать это. Можно ли как-нибудь удержать имена файлов (и их местоположение) и вызвать оператор вставки (в конце) только один раз, чтобы вставить все 20 записей одновременно?

Спасибо за вашу помощь

Привет

Киран

1 Ответ

1 голос
/ 27 мая 2011

Один из подходов, которые я рекомендую для этого, - это использование подготовленного оператора через расширение mysqli.Чтобы процитировать основное преимущество:

Фактическая цель использования подготовленного оператора в sql - сократить затраты на обработку запросов;НЕ отделять данные от запроса.Вот как это используется с php СЕЙЧАС, а не так, как оно было разработано для использования в первую очередь.С помощью SQL вы снижаете стоимость выполнения нескольких похожих запросов, используя подготовленный оператор. Это исключает синтаксический анализ, проверку и чаще всего генерирует план выполнения для указанного запроса заранее.Вот почему они работают в цикле быстрее, чем их кузены IMMEDIATE Query.

Источник: http://us2.php.net/manual/en/mysqli.prepare.php#103730

Чтобы дать пример того, как вы можете использовать это:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

if ($stmt = $mysqli->prepare("INSERT INTO `images` (`location`, `size`, `othervalues`) VALUES(?, ?, ?)")) {
  foreach($images as $image) {
    // s = string value
    // i = integer value
    $stmt->bind_param("sis", $image['location'], $image['size'], $image['othervalues']);
    $stmt->execute();
  }
  $stmt->close();
}
// Your prepared statement failed, handle the error
else {
}

$mysqli->close();

Я бы порекомендовал прочитать по mysqli :: prepare и mysqli_stmt :: bind_param для получения дополнительной информации о том, как работает процесс.Я также рекомендую прочитать подготовленные операторы в документации MySQL .

...