【问题标题】:How to capture codeigniter Duplicate entry query error如何捕获codeigniter重复条目查询错误
【发布时间】:2018-02-03 11:43:15
【问题描述】:

在 MySQL 中向表中插入数据时会发生争用情况。我检查没有重复的键,但有时还有另一个 PHP 线程在做同样的事情:

DEBUG - 2018-02-03 03:40:41 --> [9GH212VT] SELECT * FROM `device_cache` WHERE `md5sum` = '4fd43e58b0a538a0d97e4b8074b0aa80'; - 7.2002410888672E-5
DEBUG - 2018-02-03 03:40:41 --> [DLZ6FPAE] INSERT INTO `device_cache` (`md5sum`, `user_agent`, `data`) VALUES ('4fd43e58b0a538a0d97e4b8074b0aa80', '...'); - 0.10529589653015
ERROR - 2018-02-03 03:40:41 --> [QCSUMNJ5] Query error: Duplicate entry '4fd43e58b0a538a0d97e4b8074b0aa80' for key 'PRIMARY' - Invalid query: INSERT INTO `device_cache` (`md5sum`, `user_agent`, `data`) VALUES ('4fd43e58b0a538a0d97e4b8074b0aa80', '...') 

我想知道我是否能捕捉到这个错误,Codeigniter 发现这个错误时终止执行。

【问题讨论】:

  • 如果您对键执行选择并返回结果然后执行更新,否则执行插入。
  • 你试过handling errorstransactions吗?
  • @TimBrownlaw 如果存在则不需要插入它,但是存在竞争条件,即在用于检查它是否存在的选择之后和插入之前插入一行(由其他进程) .
  • 那么其他进程需要使用lock查询的事务。

标签: sql database codeigniter codeigniter-3 race-condition


【解决方案1】:

在 application/config/database.php 中设置

$db['default']['db_debug'] = FALSE;

Codeigniter 不会停止执行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2011-02-19
    • 2011-12-12
    • 2013-05-19
    相关资源
    最近更新 更多