2014-02-14 28 views
1

我與混淆條件..條件語句 - PHP的mysqli的

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 
} 
+0

'!$ sql'應該是'!$ dbc',否? – BlitZ

+0

他需要!$ dbc,$ sql只是一個字符串 – CodeBird

+0

@ HAL9000,兩者都不同,因爲「mysqli_num_rows()函數返回結果集中的行數。」 – user3209031

回答

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

這是真的你告訴PHP如果查詢沒」運行或返回0行回滾。意思是這兩個情況中的第一個是真的,你回滾

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

這,你告訴PHP,兩個應該是真實的回滾。如果只有一個是真的,那麼這裏面的內容如果不能運行。這不是你想要的。

$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 
} 

進行更新,你正在測試,如果查詢沒跑,或者不影響你回滾任何行。

+0

以及在這種情況下: $ resultupdate =「UPDATE TEST SET A =」NO「WHERE sid =」check「; if //回滾 - 交易 } 或 IF(($ resultupdate)&&(mysqli_affected_rows($ DB)== 0)!){// 回滾 - 交易 } – user3209031

+1

什麼@Prix要說的是正確的,你不需要測試$ dbc你只需要測試num_rows和affected_rows。我只是清除你的困惑與&&和|| – CodeBird

+0

嗯是的更新...我檢查如果查詢沒有運行或didn'由於某種原因而不會起作用。儘管它會回滾 – user3209031

0

只有一個條件可以工作,只要你想。

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