我目前有一个上传照片的脚本,它会上传多个图像,每次创建一个新行时都会向mySQL数据库添加一个新行。然而,我希望用户最多只能上传1张图片。
因此,我更改了注册脚本,将一行直接插入到数据库中,并为每个注册的新用户提供一个默认映像。
登录后的图像上传脚本当前使用以下行将数据放入数据库
$sql2= "INSERT INTO `profile_photo` (`profile_id`,`title`,`size`,`type`,`reference`)
VALUES ('".$_SESSION['id']."','$title','$size','$type','$pic'); ";
然而,这不是我想要的工作方式;我相信我们的决心是将其更改为UPDATE行。
当我更改行时,这导致了一个问题,我相信我还没有完全理解更新mySQL中的行的概念。
你能给我建议吗?
$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
,将解决此问题。
行为
如果尚未添加profile_id
,则这将INSERT
新行中的所有数据。如果是,它将运行UPDATE
。
然而,您的代码非常需要mysql注入。在它破坏你的网站之前,一定要仔细阅读。
鲍比桌,供您考虑。
请在此处阅读复制密钥。
假设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')";
我认为这个问题遗漏了一些信息。
- 您可能需要查看REPLACE into语句
- 或者查阅MySQL UPDATE参考手册页面
您需要的是执行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'];
也许解决方案是替换?