【问题标题】:Condition Statement - Php Mysqli条件语句 - Php Mysqli
【发布时间】:2014-03-13 14:50:12
【问题描述】:

我很困惑 ..

 global $db;

 $sql = " SELECT * FROM TEST";  

 $dbc = mysqli_query($db,$sql)


 if (!$sql || mysqli_num_rows($dbc) == 0)  {
      // rollback - Transaction
 }

 or 

 if (!$sql && mysqli_num_rows($dbc) == 0){
      // rollback - Transaction
 }

我应该使用(!$sql || mysqli_num_rows($dbc) == 0) OR (!$sql && mysqli_num_rows($dbc) == 0)

如果 $sql 为真且mysqli_num_rows($dbc) == 0 ( false ) 则条件也为假(回滚)

如果 $sql 为假且 mysqli_num_rows($dbc) == 4 ( true ) 则条件也为假(回滚)

如果两者都是假的,那么太回滚了..

类似:

$resultupdate = " UPDATE TEST SET A="NO" WHERE sid="check" ;

if((!$resultupdate) || (mysqli_affected_rows($db) == 0)) {
  // rollback - Transaction
}

or 

if((!$resultupdate) && (mysqli_affected_rows($db) == 0)){
  // rollback - Transaction
}

【问题讨论】:

  • !$sql 应该是!$dbc,不是吗?
  • 他需要!$dbc,$sql只是一个字符串
  • @HAL9000,两者是不同的,因为“mysqli_num_rows()函数返回结果集中的行数。”
  • if (!$sql) 永远不会失败,因为 $sql 是一个非空/非零字符串。

标签: php mysql if-statement mysqli conditional-statements


【解决方案1】:

只有一个条件可以随心所欲。

if (mysqli_num_rows($dbc) == 0)  {
 // rollback - Transaction
} 

【讨论】:

    【解决方案2】:
    if (!$dbc || mysqli_num_rows($dbc) == 0)  {
      // rollback - Transaction
    }
    

    这是真的,如果查询没有运行或者它返回 0 行回滚,你是在告诉 php。这意味着如果这 2 个中的 1 个为真,则您正在回滚

    if (!$dbc && mysqli_num_rows($dbc) == 0){
      // rollback - Transaction
    }
    

    这个,你告诉 php 两者都应该是 true 才能回滚。如果只有一个是真的,那么里面的内容如果不会运行。这不是你想要的。

    $resultupdate = " UPDATE TEST SET A='NO' WHERE sid='check" ;
    $update_query=mysqli_query($db, $resultupdate);
    if((!$update_query) || (mysqli_affected_rows($update_query) == 0)) {
      // rollback - Transaction
    }
    

    对于更新,您正在测试查询是否没有运行,或者没有影响您回滚的任何行。

    【讨论】:

    • 在这种情况下是什么: $resultupdate = " UPDATE TEST SET A="NO" WHERE sid="check" ; if((!$resultupdate) || (mysqli_affected_rows($db) == 0)) { // 回滚 - 事务 } 或 if((!$resultupdate) && (mysqli_affected_rows($db) == 0)){ // 回滚 - 事务 }
    • @Prix 说的是对的,你不需要测试 $dbc 你只需要测试num_rows 和affected_rows。我只是在清除您对 && 和 || 的困惑
    • hmm 是的 UPDATE ...我正在检查查询是否由于某种原因没有运行或没有生效..因此它将回滚
    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2021-02-11
    相关资源
    最近更新 更多