使用php explode()将数组存储到mySQL中

时间:2014-11-23 18:44:58

标签: php mysql

我正在制作一个汽车展示网站,我想将图像存储在数据库中(只是URL),我想要做的是将所有图像添加到表格中的同一个单元格。

然后在检索时,我想在php中使用explode()命令,这样我就可以分隔每个URL并使用循环来显示它们。

我面临的问题我不知道我应该使用什么分隔符,我不能使用任何可以在Windows,Mac或Linux中使用的文件名中使用的东西,我害怕使用系统保留密钥并导致问题。 我也担心将保存这些信息的数据类型,我认为TEXT在这里是最好的,但我听到很多人说这会导致问题。

要明确,这个想法是:

当有人上传3张图片时,图片会被上传到一个文件夹中,然后将这些图片放入1个字符串中(在添加目录名后),并在它们之间设置一个分隔符,然后存储在数据库中。 然后,我接受该字符串,使用explode()并将分离的数据存储在数组中,并使用循环显示图像,其中源是数组中存储的数据。

我需要一个特殊的分隔符或其他方式...有人可以帮助我这样做或者告诉我另一种以某种方式保存图像而没有潜在风险的方法!我见过许多网站使用动态项目符号(列表),但我从来没有能够获得代码甚至不知道如何做到这些。

修改

我使用的当前方式是10行,每个图像1个..但问题是用户将无法添加超过10个图像,如果他的图像少于10个,那么将会显示的空图像很少。 (我知道空图像的解决方案,但不可能添加更多图像..)

4 个答案:

答案 0 :(得分:2)

您可以使用任何类型的
序列化(serializejson_encode),放入数组和时 反序列化(unserializejson_decode),何时想要使用它。

但是!我建议您为图片创建一个新表格,例如car_id字段。
然后你可以加入它并完成所有工作。

可以是CarImages ('id', 'car_id', 'image_file') 另外,我建议在foreign key constraint上添加CarImages.car_id->Cars.id, 然后,当汽车被移除时,您的孤立图像将被移除。

存储序列化值总是坏主意。

答案 1 :(得分:1)

如果出于任何技术债务原因,您不能将每个图像的一行存储在单独的表中,那么您应该json_encode图像路径上的数组并将结果存储在数据库中。

答案 2 :(得分:1)

解决方案一:

创建一个名为Images的表,其中包含3列(idimage_pathuser_id),每次用户上传图片时都会将其插入此表格,并在您的表格中脚本如果要显示指定用户的上传,请通过user_id

获取
$user_id = 1 // The specified user id;
mysqli_query($connect, "SELECT * FROM images WHERE user_id = '$user_id'");
    // And Loop here trough images

解决方案二:

将图像路径插入一列。

files包含一列名为path

的列

将值插入files表:

$array = array(
    '/path/to/file/1',
    '/path/to/file/2',
    '/path/to/file/3'
);

foreach($array as $path) {
    $path = $path . '|';
    mysqli_query($connect, "INSERT INTO files (path) VALUES ('$path');
}

现在显示结果:

$query = mysqli_query($connect, "SELECT path FROM files");
$row = mysqli_fetch_assoc($query);
$paths = explode('|', $row['path']);
    foreach($paths as $path) {
    echo $path . '<br>';
}

答案 3 :(得分:0)

如果您不更改数据库,那么您应该尝试。我认为以下链接对您有用 json json-encode serialize

你可以使用任何人。

如果你像

那样设计你的表格
 Table-user

  user_id
  username

用户图像的另一个表

Table-images

serial_num
user_id
image_url

然后你可以为1个用户存储很多图像。其中images_user的user_id实际上是用户表的user_id的外键。 您正在使用relational database,因此它对您有好处,否则您可以使用nosql数据库