динамическая вставка php mysql и производительность - PullRequest
0 голосов
/ 16 апреля 2010

У меня есть папка / массив изображений, это может быть 1, максимум 12. Что мне нужно сделать, это динамически добавить их, чтобы изображения были добавлены в таблицу изображений.

На данный момент у меня есть

 $directory = "portfolio_images/$id/Thumbs/";
 $images = glob("" . $directory . "*.jpg");

  for ( $i= 0; $i <= count($images); $i += 1) {

 mysql_query("INSERT INTO project_images  (image_name, project_id)VALUES ('$images[0]', '$id')") or die(mysql_error());

 }

это нормально, но это не правильно, как это для производительности? Есть ли лучший способ?

Максимальное количество изображений будет только 12.

Ответы [ 2 ]

3 голосов
/ 16 апреля 2010

С этим решением вы отправите до 12 запросов на вставку в базу данных, что означает до 12 вызовов между PHP и MySQL.

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

Этот SQL-запрос будет выглядеть так:

INSERT INTO project_images  (image_name, project_id)
VALUES ('image name 1', 'id_1'), 
('image name 2', 'id_2'), 
('image name 3', 'id_3'), 
('image name 4', 'id_4')

См. 12.2.5. INSERT Syntax в руководстве MySQL - есть пример такого запроса.


Это означает, что вы могли бы сначала изменить свой код, чтобы построить этот запрос; и только потом вызывайте MySQL один раз.

Не проверено, но я полагаю, что ваш файл мог бы выглядеть примерно так:

$values = array();
$directory = "portfolio_images/$id/Thumbs/";
$images = glob("" . $directory . "*.jpg");
for ( $i= 0; $i <= count($images); $i += 1) {
    $values[] = "('$images[0]', '$id')";
}

$values_str = implode(', ', $value);
mysql_query("INSERT INTO project_images  (image_name, project_id) VALUES $values_str") or die(mysql_error());
1 голос
/ 16 апреля 2010
  1. У вас есть ошибка в вашем коде. Не $ images [0], а $images[$i]
  2. Ваш код не соответствует правильному синтаксису SQL. $images[$i]=mysql_real_escape_string($images[$i]) необходимо добавить

  3. Да, это можно сделать иным способом, как упомянул Паскаль

  4. Нет, проблем с производительностью нет.
  5. Использование or die() - ужасная практика, используйте or trigger_error() для обработки сообщения об ошибке и шаблон для уведомления пользователя
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...