2010-12-01 93 views
0

实际上,这已经工作,我不知道我已经改变,所以我现在遇到这个问题。尝试几乎所有的东西。MYSQL - 空字符串== 0问题(更新主键0而不是插入行)

案例:
我有以下查询。如果我想保存的内容是新的,变量$ DB-id是一个空字符串。该字段module_id是我的主键。所发生的是,此查询总是与模块id => 0

问题
传递空可变作为主键来更新行总是更新行0而不是插入一个新的。

$this->db->query("INSERT INTO modules_text 
           ( 
           module_id, 
           module_content, 
           module_page_idx, 
           module_post_id 
           ) 
        VALUES  (
           '{$DB_id}', 
           '{$content['text']}', 
           '{$content['idx']}', 
           '{$post_id}' 
           ) 
        ON DUPLICATE KEY 
        UPDATE  module_content = '{$content['text']}', 
           module_page_idx = '{$content['idx']}' 
       "); 

有没有人有一个想法,我可以告诉MYSQL创建一个新的行?任何帮助非常感谢!非常感谢你!!!

Saludos Sacha!

+0

如果主键字段有一个auto_increment? – 2010-12-01 23:50:56

回答

1

您可能需要将您的主键字段设置为自动增量。下面是一个例子。

CREATE TABLE tablename (
id MEDIUMINT NOT NULL AUTO_INCREMENT, 
name CHAR(30) NOT NULL, 
PRIMARY KEY (id)) 
+0

OH MY GOSH ...我失去了自动增量...我无法相信......把我的头撞在桌子上......我不知道这是怎么发生的。但实际上这是关键。 – Bosh 2010-12-01 23:58:33

-1

我会假设你需要给更新一个地方?
如:

$this->db->query("INSERT INTO modules_text 
           ( 
           module_id, 
           module_content, 
           module_page_idx, 
           module_post_id 
           ) 
        VALUES  (
           '{$DB_id}', 
           '{$content['text']}', 
           '{$content['idx']}', 
           '{$post_id}' 
           ) 
        ON DUPLICATE KEY 
        UPDATE  `module_content` = '{$content['text']}', 
           `module_page_idx` = '{$content['idx']}' 
        WHERE 
           `module_id` = '{$content['id']}' 
       "); 

乍一看不要抱着我吧XD,只是一个猜测。

+0

这会产生一个错误:你的mysql语法错误...它不接受where子句中的空字符串... THX ;-) – Bosh 2010-12-01 23:54:18

相关问题