You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Menu类插入数据报错:menu_id整数值无效问题求助

解决menu表插入数据报错问题

问题重现

插入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:34:53