如何判断mysqli的查询有无成功执行?CRUD

想问问

$do = new mysqli(DBHOST, DBUSERNAME, DBPASSWORD, $config['db']);

当使用了以下的UPDATE语句 (或 INSERT....)

$do->query(
      "UPDATE `user` SET
      `session` = '1'
      WHERE `id` = '123' "
   );

如何有效的知道是否有执行成功?
让我可以做抛出例外的判断?

以及当我要 SELECT 时

$found =$do->query(
   "SELECT 1 FROM `user`
   WHERE `id` = '1' "
);

假设有找到,能够怎么判断?
有没有预设可用的函数?
我的方式为

$found = mysqli_num_rows($do->query(
   "SELECT 1 FROM `user`
   WHERE `id` = '1' "
));

if (!$found) ...

只是这样好像有点⋯⋯诡异
以上有没有更简洁或更有效率的方式来判断呢?
例如可以讓語句只要很简单的回布林值就行?

阅读 897
评论 更新于 2019-05-01
    4 个回答

    图片描述

    基于mysqli/pdo的相互未兼容的状态, 我建议做二次封装, 全部用"返回受上一个 SQL 语句影响的行数" 来判断是否成功.
    pdo 读类操作需要判断: PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数
    pdo 写类操作PDO::exec() 在一个单独的函数调用中执行一条 SQL 语句,返回受此语句影响的行数

    pdo可以重新封装一个query, 统一返回影响行数字类型.. 并且以try纠错..

    mysqli

    失败时返回 FALSE,通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回TRUE。 
    

    虽然mysqli_query大致有对返回定义. 但事实上需要大量测试才可以验证, 为了更兼容,
    个人建议在返回对象时, 对mysqli_num_rows( mysqli_result $result) : int进行判断.
    在返回布尔值时, 直接对mysqli_affected_rows() 进行判断. 两个方法都100%返回数字型.

    代码编写时, 均用try做纠错处理...

    评论 赞赏 2019-05-05
      零玖
      • 7.7k

      1、优先处理异常。
      2、CUD 操作返回为成功操作的记录数,失败时返回 false ,判断是否 全等于 false 即可。
      3、R操作返回为结果集,判断结果集是否为空。

      评论 赞赏 2019-05-01
        评论 赞赏 2019-05-01

          失败,判断 result===false 就知道是不是成功了啊

          评论 赞赏 2019-05-10
            撰写回答

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