当 mysqli 語句失败时的當下处理?

$do = new mysqli($servername, $username, $password, $mysqldb);

$do->query(
      "INSERT INTO `XXX` (
        `add_time`,
        `session`,
        `name`,
        `url`,
        `content`
      )
      VALUES (
        '{$add_time}',
        '{$sessionByName}',
        '{$name}',
        '{$url}',
        '{$content}'
      ) "
    );

最近遇到一个问题,当語句失败后,下面的事情就都不做了
而且不会知道失败的原因
可能是我数据库少了个栏位,或是语句多个栏位或者有错字
导致前端的资料就会跟着不见
如果出现这种事情,能否可以得到判断,假设语句执行失败,我可以做备份动作?或是其他行为

阅读 426
评论 2019-04-23 提问
    3 个回答

    可以使用php的异常处理

    try {
        // try代码块的代码执行错误后会抛出异常
        $do = new mysqli($servername, $username, $password, $mysqldb);
        $do->query('xxx');
    } catch(Exception $e) {
        // 这里的$e就是捕捉到上面try代码块抛出的错误异常
        // $e中包含错误信息,使用$e->getMessage()可以获取错误描述,$e->getCode()获取错误码
        // catch代码块一般用来处理正常逻辑失败后的错误处理,比如打log之类的
    }

    另外,php的异常有点特别,php中的不正常运行终止大致分两种类型,一种是错误,一种就是异常,由于历史原因,php很多自带的函数是不抛异常而是报错误的,即无法使用try...catch来处理这种情况,但是php7新增了throwable可以捕捉到php的错误,具体的情况你可以自己去查更详细的资料

    评论 赞赏 2019-04-23
      小明
      • 1.3k

      老姐,你太6了,你是我见过提问最多的人了。我一年多前就回答过你问题,然后忘了账号,一直没上,刚刚上来看看又看到你的问题,翻了的提问终于翻到我以前回答过的问题,找回了账号。

      回到你的问题,你说的这个叫异常处理,官方文档有很详细的例子。

      看:https://www.php.net/manual/en...

      评论 赞赏 2019-04-23

        取得 当前 lastid来判断..

        理论上讲应该自行封装一下,

        评论 赞赏 2019-04-25
          撰写回答

          登录后参与交流、获取后续更新提醒