MySQL:无法获取LAST_INSERT_ID()

时间:2014-07-22 11:46:43

标签: php mysql fuelphp

我正在使用FuelPHP框架和MySQL创建一个应用程序,我正在尝试AJAX更新/插入已经存在于DB中的项目的新日志。 这是我的MySQL代码:

UPDATE `work_orders` SET `status_id`='{$status}' WHERE `id` = '{$wo_id}';
INSERT INTO `work_order_logs`(`id`, `work_order_id`, `log_text`, `status_id`) VALUES ('{$id}', '{$wo_id}', '{$text}', '{$status}')
    ON DUPLICATE KEY UPDATE `log_text`='{$text}',`status_id`='{$status}';

SELECT LAST_INSERT_ID() as id;

当从phpmyadmin执行此代码时,它成功运行并返回id,但是当从FuelPHP执行时它只返回1,我认为这意味着成功操作。

FuelPHP代码:

public static function updateLogById($id, $wo_id, $text, $status)
{
    try {
        $log_query = \DB::query("
            UPDATE `work_orders` SET `status_id`='{$status}' WHERE `id` = '{$wo_id}';
            INSERT INTO `work_order_logs`(`id`, `work_order_id`, `log_text`, `status_id`) VALUES ('{$id}', '{$wo_id}', '{$text}', '{$status}')
            ON DUPLICATE KEY UPDATE `log_text`='{$text}',`status_id`='{$status}';

            SELECT LAST_INSERT_ID() as id;
        ")->execute();
    } catch(\Database_Exception $e) {       
        return array(false, \DBE::handle_error());
    }
    return array(true, $log_query);
}

任何人都可以看到,出了什么问题? 谢谢你的回答。

2 个答案:

答案 0 :(得分:3)

将插入内容与将要修复它的更新分开

答案 1 :(得分:0)

为了获得正确的结果,在这种情况下您必须提供查询类型,因为它不是基于查询进行超智能结果类型检测。我认为当您提供以下第二个参数时,您的查询应该有效:

$result = \DB::query($query, \DB::SELECT);

这应该为您提供一个Result对象,您可以从中获取id。