我正在使用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);
}
任何人都可以看到,出了什么问题? 谢谢你的回答。
答案 0 :(得分:3)
将插入内容与将要修复它的更新分开
答案 1 :(得分:0)
为了获得正确的结果,在这种情况下您必须提供查询类型,因为它不是基于查询进行超智能结果类型检测。我认为当您提供以下第二个参数时,您的查询应该有效:
$result = \DB::query($query, \DB::SELECT);
这应该为您提供一个Result对象,您可以从中获取id。