将数组存储到mySQL中使用php explode()
我正在制作一个车展的网站,我想将图像存储在数据库中(只是URL),我想要做的是将所有图像添加到表中的同一个单元格。将数组存储到mySQL中使用php explode()
然后在检索时,我想在php中使用explode()命令,所以我可以分离每个URL并使用循环来显示它们。
我面对的问题我不知道我应该用什么分隔符,我不能使用任何可以在Windows,Mac或Linux中使用的文件名中使用的东西,我害怕使用系统保留密钥并导致问题。 我也很关心能够保存这些信息的数据类型,我认为TEXT在这里最好,但是我听到很多人说它会导致问题。
要清楚,这个想法是:
有人上传3个图像时,图像会被上传到一个文件夹,(加名后的目录),那么名字将采取投入1串与他们之间的分隔符,然后将被存储在数据库中。 然后,我接受该字符串,使用explode()并将分离的数据存储在数组中,并使用循环显示图像,其中源是数组中存储的数据。
我需要一个特殊的分隔符或其他方式...有人可以帮助我做到这一点或告诉我另一种方式保存图像没有潜在的风险莫名其妙!我见过很多使用动态项目符号(列表)的网站,但我从来没有能够获得代码,甚至不知道如何去做。
编辑:
我使用的是有10行,1为每个图像当前的方式..但这里的问题是,用户将无法添加超过10幅图像,如果他有少于10个图像,那么将显示少量空白图像。 (我知道为空图像的解决方案,但它是不可能添加更多的图像..)
你可以把你的阵列和
反序列化(unserialize
,json_decode
)时,要使用它时使用任何类型
系列化(serialize
,json_encode
)的。
但是!我建议你为图片创建一个新表格,例如car_id
字段。
然后,您可以加入并获取全部内容。
它可以CarImages ('id', 'car_id', 'image_file')
此外,我建议增加foreign key constraint
上CarImages.car_id->Cars.id
, 那么你的孤儿图像将级联删除,届时汽车将删除。
存储序列化值总是不好的主意。
因此,为每辆车创建一个新表那么可以根据需要将行添加到它们中。当汽车被删除时,表会自动丢弃?但不会创建数千个或更多的表创建混乱并导致DBMS(MySQL)变慢?该网站可能会变得很大,如果不是10万,车的数量将达到数千。 – bakriawad 2014-11-23 19:33:07
@bakriawad,你不会为每辆车创建一张桌子,只有一张桌子,它包含图片和汽车的相应钥匙。您的查询将如下所示:'SELECT cars.car_id,images.image_id,images.name FROM cars INNER JOIN images ON(cars.car_id = images.car_id)'那么您可以遍历所有保存的每辆车的图像 – 2014-11-23 20:30:28
您只需要两张表:汽车信息(每行一个),'CarImages'图像(每行一行,每行一行)... – 2014-11-23 20:34:48
如果您不能在任何技术债务的原因单独的表上存储每行图像一行,那么你应该json_encode
在图像路径上存储数组并将结果存储在数据库中。
或者'serialize',或者每个其他正确的序列化函数 – 2014-11-23 19:01:47
,所以这里的概念是:取一个数组,将它们拼成另一个表单并将其存储在数据库中,您可以再次解码它以使数组... ... am我在这里? – bakriawad 2014-11-23 19:03:42
对,重要的是使用可靠的序列化方法。正如你所指出的,一个url真的可以包含任何东西。通过用json包装它们,您可以轻松地检索值。一些数据库像postgresql有一个json类型。 – 2014-11-23 19:11:44
如果你不改变你的数据库,那么你应该try.I认为下面的链接对你有用 json json-encodeserialize
你可以使用任何人。
如果你设计的表像
Table-user
user_id
username
另一个表用户图像
Table-images
serial_num
user_id
image_url
那么你可以存储许多图像的图像表1个user.here USER_ID实际上用户的外键表的user_id。 您正在使用relational database所以这是很好的你,否则,你可以使用nosql数据库
解决方法一:
创建一个表名为Images
包含3列(id
,image_path
,user_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
包含1列称为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>';
}
当你需要更新时,你可以做什么? – 2014-11-23 19:14:23
如果你使用这些东西,那么你应该尝试nosql ... – 2014-11-23 19:15:14
更新我可以把他们,爆炸,改变我需要改变,然后重新组装和更新... – bakriawad 2014-11-24 17:23:56
为什么要将它们存储在一个字符串中,只需将它们存储在单独的数据库行中即可。 – Mikk 2014-11-23 18:50:58
你可以使用行形象 – 2014-11-23 18:51:04
中的图像,首先你告诉你为什么你存储在一个字符串...? – 2014-11-23 18:52:17