如何判断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) ...

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

阅读 5.3k
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做纠错处理...

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题