Как динамически хранить массив имен изображений в базе данных с помощью PHP

0

Я использую JQuery Plugin Uploadify для загрузки файлов и сохраняю имя изображения с помощью пути в базу данных с помощью простого запроса mysql, а затем извлекаю его.

моя таблица базы данных MySQL использует следующие сущности,

id int(20) 
image_url varchar(255)

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

в настоящее время с помощью простой инструкции mysql INSERT я храню одно имя файла.

Теперь я хочу загрузить массив имен изображений с помощью пути. или я хочу сохранить столько изображений, сколько хочу динамически в одну таблицу col image_url, по какой-то причине я планирую хранить 4 или более изображений, я хочу, чтобы все четыре изображения имели один конкретный номер идентификатора.

как это сделать?

Благодарю вас

Теги:

2 ответа

2
Лучший ответ

Изменить 2
Я удалил предыдущие скрипты, здесь новый:

в основном то, что я хочу достичь, - это при вставке в базу данных, я хотел бы сохранить путь изображения с именами в виде массивов. так что я мог бы хранить столько изображений, которые хочу получить в конкретном id, например, id 1 будет иметь 3 изображения, id 2 будет иметь 5 изображений, id 3 будет иметь 4 изображения и т.д.

Лучший способ сделать это - добавить отдельную запись для каждого URL-адреса изображения. Вы также можете использовать одну запись и хранить все URL-адреса в виде массива, но поскольку вы храните это в базе данных, которая не очень полезна. Сохранение каждой записи по отдельности облегчает доступ и обновление данных.

Кроме того, убедитесь, что поле "id" в вашей таблице не является первичным ключом/автоматическим приращением. В противном случае вы не сможете использовать один и тот же идентификатор более одного раза. Я исправил это здесь:

// array with your images
$images = array('url1','url2','url3');

// determine a new id
$sql = "SELECT MAX(id) FROM images";
$res = mysql_query($sql);
list($id) = mysql_fetch_row($res);

// highest current id, plus one
$id++;

// now create a values array to insert in the database
$values = array();

foreach ($images as $image) {
  $values[] = "($id, '".mysql_real_escape_string($image)."')";
}

// comma-separate the values
$values = implode(',',$values);

// run the query
$sql = "INSERT INTO images (id, image_url) VALUES $values";
mysql_query($sql);

Если вы хотите хранить массивы, лучше всего serialize использовать данные и использовать unserialize при его получении. Пример:

$images = array(...);

$images = serialize($images);

$sql = "INSERT INTO images (image_url) VALUES ($images)";

Чтобы добавить изображения, сначала необходимо извлечь данные, неэриализовать массив, обновить массив новыми изображениями, снова сериализовать его, обновить запись в базе данных.

  • 0
    в основном то, чего я хочу достичь, при вставке в базу данных, я хотел бы сохранить путь к изображению с именами в виде массивов. чтобы я мог хранить столько изображений, сколько я хочу, в конкретный идентификатор, например, идентификатор 1 будет иметь 3 изображения, идентификатор 2 будет иметь 5 изображений, идентификатор 3 будет иметь 4 изображения и так далее.
  • 0
    Обновил мой ответ.
1

Это не normalized хорошо, но вы могли бы сделать это:

<?php

// ... your code here ...

try {
 $dbh = new PDO( 'mysql:dbname=' . $your_database_name . ';host=' . $your_database_host, $your_database_username, $your_database_password );
} catch ( PDOException $e ) {
 throw new Exception( 'Database connection failed: ' . $e->getMessage() );
}

$stmt_insert = $dbh->prepare("INSERT INTO images('url_array') VALUES (:image_array_json)");
$stmt_insert->execute( array(':image_array_json', json_encode( $image_array )) );

// ... et cetera ...

?>

... и получить массив (если вы знаете image_id):

<?php

// ... your code here ...

try {
 $dbh = new PDO( 'mysql:dbname=' . $your_database_name . ';host=' . $your_database_host, $your_database_username, $your_database_password );
} catch ( PDOException $e ) {
 throw new Exception( 'Database connection failed: ' . $e->getMessage() );
}

$stmt_retrieve = $dbh->prepare("SELECT url_array FROM images WHERE image_id=:image_id");
$stmt_retrieve->execute( array(':image_id', $image_id) );

$ret = $stmt_retrieve->fetch( PDO::FETCH_ASSOC );

$image_array = json_decode( $ret['url_array'] );

// ... et cetera ...

?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню