mysql插入问题

Posted

技术标签:

【中文标题】mysql插入问题【英文标题】:mysql insert problem 【发布时间】:2010-01-05 16:27:26 【问题描述】:

我遇到了一个非常奇怪的问题。我不知道为什么它不起作用。我创建一个用户并获取 id 并在另一个表中插入基于该 id 的行。该行使用该 id 插入,但未插入该行的其他值!

 $user_id = mysqli_insert_id($this->connection);

 $query = "INSERT INTO selections 
 (user_id, language_id, country_id, region_id, city_id, gender_id, age_id, category_id)
 VALUES ($user_id, 1, 1, 0, 0, 0, 20, 0)";

所以 user_id 被插入,而不是其他值(它们在表中都是 0)。我真的检查了这些列并删除了所有外键来调试这个问题。但我一点头绪都没有。

这些列都是 INT。奇怪的部分是有时当我用文字数字替换 $user_id 时它可以工作,有时它不会。但始终创建​​行。我已经检查了 $user_id 是一个整数。

我知道这是一个棘手的问题,它可能是由很多事情引起的,但我已经尝试解决这个小问题 3 个小时了。如果有人给我一些我可以做的事情来调试这个问题,那就太好了。

更新:即使我设置了默认值并只插入第一列(user_id),它也不起作用。其他所有字段都是 0。太奇怪了!

| selections | CREATE TABLE `selections` (
  `user_id` int(11) NOT NULL,
  `language_id` int(11) NOT NULL DEFAULT '1',
  `country_id` int(11) NOT NULL DEFAULT '1',
  `region_id` int(11) NOT NULL DEFAULT '0',
  `city_id` int(11) NOT NULL DEFAULT '0',
  `gender_id` int(11) NOT NULL DEFAULT '0',
  `age_id` int(11) NOT NULL DEFAULT '0',
  `category_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |


  $query = "INSERT INTO selections
        (user_id)
        VALUES ('$user_id')";

user_id显示178,其他字段为0:(

更新:

它在 sql 命令行中工作。但不是在 php.ini 中。但是mysqli没有产生错误,并且确实插入了行但是为什么其他字段是0?

回答:我的错。我有一个 jquery 脚本,将它改回 0 0 0 0 0 0 0。我的页面上有很多 AJAX,所以很难找到它......对不起,我的错!

【问题讨论】:

你能告诉我们 SHOW CREATE TABLE 选择的结果吗?在 MySQL 中? 您是否检查过mysqli_query() 或诸如此类的调用实际上成功 您是否尝试通过( " .$userid . ",.... 附加用户ID? 表中是否已经包含具有该 user_id 的行? 太奇怪了。即使我有默认值然后插入 user_id 它也不起作用。每个字段都是 0。 【参考方案1】:

当你遇到这样的情况时,在执行之前将查询打印到屏幕上:

$query = "INSERT INTO ...";
echo $query

试试:

$query = "INSERT INTO selections 
            (user_id, language_id, country_id, region_id, city_id, gender_id, age_id, category_id)
          VALUES 
            ($user_id, 1, 1, 0, 0, 0, 20, 0)";

在 SQL 字符串语句中引用 PHP 变量时,您需要将它们包装在 中。

使用您的默认约束


如果您有默认值,则无需在 INSERT 语句中设置值:

INSERT INTO selections 
  (user_id)
VALUES 
  ($user_id)

参考完整性


您正在获取最后插入的 id 并在随后插入另一个表中使用它,但您没有在 user_id 列上定义外键以确保进入该列的值实际存在于另一张桌子。如果您提供最后一个插入 id 获得的表和列的名称,我将提供 ALTER TABLE statement。

【讨论】:

是的,一定要回显 $query,然后尝试加载 MySQL 控制台并运行该查询,看看会发生什么。我建议的另一件事是将你的 SQL 模式设置为 Strict,MySQL 有不同的模式,有些模式会在错误时将 0 插入变量并发出警告,如果出现错误,其他人会一起停止插入,你可能想要一个严格模式。【参考方案2】:
$query = "INSERT INTO selections 
(user_id, language_id, country_id, region_id, city_id, gender_id, age_id, category_id)
VALUES ('$user_id', 1, 1, 0, 0, 0, 20, 0)";

$user_id 周围的单引号可能会这样做。

【讨论】:

如果user_id 列是与字符串相关的数据类型(文本、varchar),那将是正确的

以上是关于mysql插入问题的主要内容,如果未能解决你的问题,请参考以下文章

MySql批量插入与唯一索引问题

mysql中插入中文数据

关于向mysql数据库中插入数据时,判断是不是进行插入的问题

关于主键和插入的简单mysql问题

MySQL插入中文数据乱码问题

解决mysql无法插入中文数据及插入后显示乱码的问题