2012-04-27 109 views
1

尝试插入或更新时,没有任何内容进入数据库。 这是表格的布局插入/更新查询

(
`id` int(11) NOT NULL AUTO_INCREMENT, 
`user_id` int(11) NOT NULL, 
`thesis_Name` varchar(200) NOT NULL, 
`abstract` varchar(200) NOT NULL, 
`complete` int(2) NOT NULL DEFAULT '1', 
PRIMARY KEY (`id`), 
KEY `user_id` (`user_id`) 
) 

正如你所看到的ID是唯一的关键。 user_id是会话的内容。我希望它有可能为user_id有两行,所以只有id应该是唯一的,因此这应该是寻找是否插入或更新的关键。 这是我一直使用的是什么:

​​

如果noway周围则USER_ID可以是唯一的也只有1行每个用户

+2

会发生什么?是否报告错误?你的具体问题是什么?或者我们应该只是和你一起猜测? – hakre 2012-04-27 13:29:19

+8

对于上帝之爱,请使用参数化查询 – 2012-04-27 13:30:00

+3

如果您不知道Keith的含义,或者他为什么这么说,请阅读[Bobby Tables](http://bobby-tables.com) – eggyal 2012-04-27 13:30:48

回答

1

你能告诉我们最终的查询?像这样的东西$query = sprintf(...)后:

echo $query 

也许一个简单的报价在你$abstract?您可以使用mysql_real_escape_string()到advoid它:

$thesis_Name = mysql_real_escape_string($thesis_Name); 
$abstract = mysql_real_escape_string($abstract); 
0
  1. 从MySQL得到一个错误,你必须使用mysql_error()功能。
  2. 你必须转义你正在查询的字符串。
  3. sprintf()在这里没有用处。

$user_id  = intval($_SESSION['user_id']);  
$id   = mysql_real_escape_string($_POST['id']); 
$thesis_Name = mysql_real_escape_string($_POST['thesis_Name']); 
$abstract = mysql_real_escape_string($_POST['abstract']); 

$query  = "INSERT INTO thesis (id, user_id, thesis_Name, abstract) 
       VALUES ('$id','$user_id', '$thesis_Name', '$abstract') 
       ON DUPLICATE KEY UPDATE 
        `thesis_Name` = VALUES(`thesis_Name`), 
        `abstract` = VALUES(`abstract`)"; 

mysql_query($query) or trigger_error(mysql_error()." ".$query); 

如果您使用的是mysql *函数。

然而,这是相当不寻常的做法
通常我们决定哪些查询基于PHP的逻辑来使用,这样

if ($_POST['id']) { 
    $query = "INSERT..." 
} else { 
    $query = "UPDATE..." 
} 
+0

感谢您的帮助。与此它添加插入,但增加了另一行(与same_id和不同的id),而不是更新我插入 – user1296762 2012-04-27 13:57:29

+0

好,起初我把用户ID作为唯一键。 – 2012-04-27 14:02:07

+0

所以现在使用顶级代码,第二行不会被添加,但数据不会改变。按保存时,它只是将我重定向到正确的页面。你是否建议尝试你的第二段代码呢? – user1296762 2012-04-27 14:14:52