我目前有一个上传照片的脚本,当它上传多个图像时,每次创建一个新图像时都会向mySQL数据库添加一个新行。但是我希望用户只能上传1张图片。
因此我更改了寄存器脚本,直接向数据库插入一行,并为每个注册的新用户提供默认图像。
登录后的图像上传脚本当前使用以下行将数据放入数据库
$sql2= "INSERT INTO `profile_photo` (`profile_id`,`title`,`size`,`type`,`reference`)
VALUES ('".$_SESSION['id']."','$title','$size','$type','$pic'); ";
然而,这不是我希望这个工作的方式;我相信解决方案是将其更改为UPDATE行。
当我改变这一行时,这会引起一个问题,我相信我还没有完全理解在mySQL中更新行的概念。
请你指教一下吗?
答案 0 :(得分:2)
$sql2=
"INSERT INTO `profile_photo` (`profile_id`,`title`,`size`,`type`,`reference`)
VALUES ('".$_SESSION['id']."','$title','$size','$type','$pic')
ON DUPLICATE KEY UPDATE title = VALUES(title), size = VALUES(size), type = VALUES(type), reference = VALUES(reference)";
如果profile_id
列获得索引unique
,则会解决此问题。
<强>行为强>
如果尚未添加INSERT
,这将profile_id
新行中的所有数据。如果是,则会改为运行UPDATE
。
但是你的代码几乎要求mysql注入。在它毁坏你的网站之前,请仔细阅读。
Bobby tables,供您考虑。
在此处阅读DUPLICATE KEY。
答案 1 :(得分:1)
假设profile_id
是您的唯一密钥:
$sql2= "
INSERT INTO
`profile_photo` (`profile_id`,`title`,`size`,`type`,`reference`)
VALUES ('".$_SESSION['id']."','$title','$size','$type','$pic')
on duplicate key update set title='$title', size='$size', type='$type', reference='$reference'; ";
您也可以使用替换为:
$sql2= "
Replace into
`profile_photo` (`profile_id`,`title`,`size`,`type`,`reference`)
VALUES ('".$_SESSION['id']."','$title','$size','$type','$pic')";
答案 2 :(得分:0)
我认为这个问题遗漏了一些信息。
答案 3 :(得分:0)
您需要执行UPDATE sql语句:
$sql3= "UPDATE `profile_photo` SET `title`='" . mysql_real_escale_string($title) .
"', `size`='" . mysql_real_escape_string($size) .
"', `type`='" . mysql_real_escape_string($type) .
"', `reference`='" . mysql_real_escape_string($pic) .
"' WHERE `profile_id`=" . $_SESSION['id'];
答案 4 :(得分:0)
也许解决方案是Replace?