SQL语法整数值错误:#1366自增ID插入异常求助
解决MySQL自增列INSERT时的#1366错误
嘿,这个坑我当初刚学PHP+MySQL的时候也踩过!咱们来一步步拆解问题:
首先,你遇到的#1366 Incorrect integer value错误,根源在于你给自增整数ID列传了空字符串''。虽然自增列确实应该由数据库自动生成,但空字符串并不是MySQL认可的“让数据库自动处理”的有效值——尤其是当MySQL处于严格模式(现在默认都是开启的)时,整数列不能接收非整数类型的空字符串。
两种靠谱的解决方案:
1. 显式指定要插入的列(推荐)
最稳妥的写法是不包含自增ID列,直接列出你要插入数据的列名,这样MySQL会自动为自增ID生成值:
INSERT INTO Users (username, password, your_third_column, your_fourth_column) VALUES ('$username','$password','0','empty');
注意:把your_third_column和your_fourth_column替换成你表中对应的真实列名,比如可能是is_active和avatar之类的
2. 给自增列传NULL而非空字符串
如果你一定要写全所有列,那自增列的位置应该传NULL,MySQL会自动将其替换为下一个自增的整数值:
INSERT INTO Users VALUES (NULL,'$username','$password','0','empty');
额外重要提醒:
你现在直接把变量$username、$password拼进SQL语句里,存在严重的SQL注入风险!建议立刻改用PDO或者mysqli的预处理语句,举个PDO的例子:
// 假设已经建立了PDO连接 $stmt = $pdo->prepare("INSERT INTO Users (username, password, is_active, avatar) VALUES (:username, :password, :active, :avatar)"); $stmt->execute([ 'username' => $username, 'password' => password_hash($password, PASSWORD_DEFAULT), // 顺便提下:密码一定要哈希存储! 'active' => 0, 'avatar' => 'empty' ]);
另外,密码绝对不能明文存入数据库,一定要用password_hash()加密后再存储!
内容的提问来源于stack exchange,提问作者Th3W31rd0
相关产品推荐
相关产品推荐

