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插入问题的主要内容,如果未能解决你的问题,请参考以下文章