条件语句-Php Mysqli

条件语句-Php Mysqli,php,mysql,if-statement,mysqli,conditional-statements,Php,Mysql,If Statement,Mysqli,Conditional Statements,我对情况感到困惑 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 - Tr

我对情况感到困惑

 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)还是(!$sql&&mysqli_num_rows($dbc)==0)

如果$sql为true且
mysqli\u num\u行($dbc)==0(false)
则too条件为false(回滚)

如果$sql为false并且
mysqli_num_rows($dbc)==4(true)
too条件为false(回滚)

如果两者都为假,则太向后滚动

类似于:

如果查询没有运行或返回0行回滚,那么您会告诉php。这意味着,在这两种情况中,第一种情况是正确的,你正在后退

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
}
if (mysqli_num_rows($dbc) == 0)  {
 // rollback - Transaction
} 

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

只有一个条件可以按您的需要工作

$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
}
if (mysqli_num_rows($dbc) == 0)  {
 // rollback - Transaction
} 

$sql
应该是
$dbc
,不是吗?对,他需要$dbc,$sql只是一个字符串@HAL9000,两者都是不同的,因为“mysqli_num_rows()函数返回结果集中的行数。”
if(!$sql)
永远不会失败,因为$sql是一个非空/非零字符串。在这种情况下:$resultupdate=“updatetestset a=“NO”WHERE sid=“check”;if(!$resultupdate)|(mysqli_受影响的行($db)==0)){//rollback-Transaction}或if(!$resultupdate)和&(mysqli_受影响的行($db)==0)){//rollback-Transaction}@Prix所说的是正确的,您不需要测试$dbc,只需要测试num_行和受影响的_行。我只是在清除您对&&和| |嗯的混淆,是的,用于更新…我正在检查查询是否由于某种原因未运行或未生效。因此它将回滚