PHP Menu类插入数据报错:menu_id整数值无效问题求助
问题重现
插入menu表时触发报错,错误信息如下:
Database query failed: Incorrect integer value: '' for column `hotelmanager2.0`.`menu`.`menu_id` at row 1 Last SQL query: INSERT INTO menu (menu_id, menu_parent_id, menu_title, menu_title_en, menu_title_es, menu_desc, menu_desc_infos, menu_link, menu_picture, menu_position, menu_created_at, menu_is_extension, menu_extension_vedette, menu_active) VALUES ('', '11', 'FAQ', '', '', '', '', '', '', '1', '2023-04-09 23:40:42', '0', '0', '1')
报错原因
menu_id是表的自增主键字段,属于整数类型。当前代码在插入时主动传入了空字符串'',而MySQL严格模式下不允许向整数列插入非有效整数值,因此触发错误。正确逻辑是让数据库自动生成自增ID,插入语句中不需要包含menu_id字段。
修复步骤
修改Menu类的create方法,在生成INSERT SQL前移除menu_id字段,避免传入空字符串:
修改后的create方法代码
public function create() { global $database; $attributes = $this->sanitized_attributes(); // 移除自增主键menu_id,由数据库自动生成ID unset($attributes['menu_id']); $sql = "INSERT INTO " . self::$table_name . " ("; $sql .= join(", ", array_keys($attributes)); $sql .= ") VALUES ('"; $sql .= join("', '", array_values($attributes)); $sql .= "')"; if ($database->query($sql)) { $this->menu_id = $database->insert_id(); return true; } else { return false; } }
额外说明
- 原
save方法的判断逻辑无需修改:新增记录时menu_id未赋值,会自动走create分支;创建成功后通过$database->insert_id()获取自动生成的ID并赋值给对象。 - 需确保数据库中
menu_id字段已设置为自增主键,若未设置需先执行表结构修改:ALTER TABLE menu MODIFY COLUMN menu_id INT AUTO_INCREMENT PRIMARY KEY;
内容的提问来源于stack exchange,提问作者sherlock
相关产品推荐
相关产品推荐

