“准备”SQL插入

时间:2014-09-26 17:56:31

标签: php mysql sql sql-insert

我的网站上有一个文件上传功能,在提交帖子后立即执行。

唯一的问题是,如果在提交帖子后文件上传出错,例如文件太大,帖子仍然会被提交。

目前,如果文件上传失败,我必须删除插入的帖子,但我认为这可能是更好的解决方案。

代码看起来像这样:

$query=$con->query('INSERT INTO `posts` (`user`,`comment`) VALUES("'.$user->id.'","'.$comment.'")'); //Submit post
$postID = $con->insert_id; //This variable is needed for the file upload

if (empty($error)){  //proceed with file upload

//.....

if (empty($error))
     $con->query('DELETE FROM `posts` WHERE `id` = "'.$postID.'" LIMIT 1'); //Delete post if file error
}else{
     $con->query('UPDATE `posts` SET `image` =".$imageID." WHERE `id` = "'.$postID.'" LIMIT 1'); //
}

2 个答案:

答案 0 :(得分:0)

根据您的使用情况,您可以在插入前调用START TRANSACTION,在成功时调用COMMIT,或在出错时调用ROLLBACK

正如durbnpoisn指出的那样,你应该检查你的SQL注入查询。

有关文档,请参阅http://dev.mysql.com/doc/refman/5.6/en/commit.html

答案 1 :(得分:0)

  

唯一的问题是,如果文件出错   在提交帖子后上传,例如文件也是如此   很大,这个帖子仍然会被提交。

是的,无论是否有错误,都会一直提交表格。 这里更好的解决方案是将您的任务转变为小任务。所以在单词中 - 如果没有错误,请将图像路径写入表中。

将这些单词转换为代码会导致类似这样的内容:

<?php

// If there were not errors during form submission
// As you might know 0 means there are absolutely no errors
if ($_FILES['field_name']['error']) == 0) {

  $db->insert(....);

  $id = $db->getLastId();

  $uploader->upload($_FILES, $id);

} else {

   // Just display errors and don't do anything here
}

这样你绝对保证你的东西会被插入到一个表中,以防绝对没有错误,所以根本不需要另外的查询。