我正在使用jQuery Plugin Uploadify上传文件,并使用简单的mysql查询将带有路径的图像名称存储到数据库中,然后检索它。
我的MySQL数据库表使用以下实体
id int(20)
image_url varchar(255)
我的图像存储过程是这样的,我首先重命名文件,给它一个唯一的名称并将其移动到所需的目录。然后将带有路径的图像名称存储到数据库中。
目前通过使用简单的mysql INSERT语句我存储单个文件名。
现在我想用路径上传图像名称数组。或者我想将尽可能多的图像存储到单个表col image_url中,出于某种原因我计划存储4个或更多图像,我希望所有四个图像都有一个特定的ID号。
我该怎么做?
谢谢
答案 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 ...
?>