【问题标题】:MYSQL - empty string == 0 problem (updates row with primary key 0 instead of insert)MYSQL - 空字符串 == 0 问题(使用主键 0 而不是插入更新行)
【发布时间】:2011-05-18 19:56:16
【问题描述】:

实际上这已经奏效了,我不知道我做了什么改变,所以我现在遇到了这个问题。几乎什么都试过了。

案例:
我有以下查询。如果我要保存的内容是新的,则变量 $DB-id 是一个空字符串。字段 module_id 是我的主键。发生的情况是,此查询始终使用 module_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!

【问题讨论】:

  • 如果主键字段是auto_increment?

标签: mysql string zero


【解决方案1】:

我假设您需要给 UPDATE 一个 WHERE?
例如:

$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,乍一看只是猜测。

【讨论】:

  • 这会报错:你的 mysql 语法有错误...它不接受 where 子句中的空字符串...无论如何 THX ;-)
【解决方案2】:

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

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

【讨论】:

  • 天哪……我失去了自动增量……我不敢相信……我把头撞在桌子上……我不知道这是怎么发生的。但实际上这才是重点。
  • 我现在觉得自己太愚蠢了……但实际上这是我从未见过的最简单的错误。
  • 嗯,看起来这不是我的错误......只是查看了 Github,看看是谁做的 ;-) 复仇!!!!不知道怎么...但我会把那个还给他... THX ! ;-P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
相关资源
最近更新 更多