如何使用PHP将图像名称数组动态存储到数据库中

时间:2010-10-07 00:31:39

标签: php mysql

我正在使用jQuery Plugin Uploadify上传文件,并使用简单的mysql查询将带有路径的图像名称存储到数据库中,然后检索它。

我的MySQL数据库表使用以下实体

id int(20) 
image_url varchar(255)

我的图像存储过程是这样的,我首先重命名文件,给它一个唯一的名称并将其移动到所需的目录。然后将带有路径的图像名称存储到数据库中。

目前通过使用简单的mysql INSERT语句我存储单个文件名。

现在我想用路径上传图像名称数组。或者我想将尽可能多的图像存储到单个表col image_url中,出于某种原因我计划存储4个或更多图像,我希望所有四个图像都有一个特定的ID号。

我该怎么做?

谢谢

2 个答案:

答案 0 :(得分:2)

编辑2
我删除了以前的脚本,这是一个新脚本:

  

基本上我想要实现的是当插入数据库时​​我想存储名称为数组的图像路径。所以我可以将我想要的图像存储到特定的id中,例如id 1将有3个图像,id 2将有5个图像,id 3将有4个图像等等

执行此操作的最佳方法是为每个图像网址添加单独的条目。您还可以使用单个条目并将所有URL存储为数组,但由于您将其存储在不太有用的数据库中。单独存储每个条目可以更容易地访问和更新数据。

此外,请确保表中的“id”字段不是主键/自动递增。否则,您将无法多次使用相同的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)";

要添加图像,您应首先检索数据,反序列化数组,使用新图像更新数组,再次序列化,更新数据库条目。

答案 1 :(得分: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 ...

?>