$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。但mysqli没有产生错误,确实插入了行,但为什么其他字段为0?
答案:我的错。我有一个jquery脚本,将其更改回0 0 0 0 0 0 0.我的页面上有很多AJAX,所以找到它很棘手...对不起我的坏!答案 0 :(得分:4)
遇到这种情况时,请在执行之前将查询打印到屏幕:
$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。
答案 1 :(得分:1)
$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周围的单引号可能会这样做。