2012-01-13 145 views
0

我正在使用SQLite3以及內置於PHP中的SQLite3類。下面的代碼不能像我期望的那樣基於我熟悉的其他mysql類。 manual表示如果查詢成功,exec方法應該返回true,失敗時返回false。但是,從我所看到的情況來看,這似乎並不是這種情況。PHP SQLite3類'exec'函數在返回false時不返回false

$udb = new SQLite3('app.sqlite'); 

if($udb->exec("DELETE FROM users WHERE id = $del") != FALSE) 
    $message = 'Deleted User'; 
else 
    $message = 'Could not delete the user.'; 

我認爲如果具有該ID的行不存在,查詢將返回false或0或'0'。這些都不準確。事實上,我無法弄清楚函數返回的是什麼。

有人可以幫這個錯誤檢查if塊應該看起來像什麼嗎?

+0

您已經嘗試了'的var_dump($ udb-> EXEC( 「DELETE FROM用戶WHERE ID = $德爾」))',看看到底是什麼感覺回國?至於它不返回false,它正在執行查詢 - 只是發生沒有受到影響的行。 – jprofitt 2012-01-13 18:57:17

+0

對,@jprof,我想到了。但結果應該是0或'0'。然後應該用'!='來捕獲,因爲它不檢查類型。所以'!= FALSE'應該返回與'!= 0'相同的值。但是我會檢查'var_dump'的結果。 – JakeParis 2012-01-13 19:16:41

+0

'exec()'返回它是否成功執行,而不是多少行受到影響。如果它刪除了5行,它不會返回5,它會返回'true'。因此,如果它刪除了0行,它仍會返回'true',因爲它成功執行了查詢。 – jprofitt 2012-01-13 19:18:29

回答

0

成功執行查詢與返回錯誤時發生錯誤不一樣。

如果你有無效的SQL,那麼它將失敗(查詢),它將返回false。

+0

好的,真的夠了,但不是真正的解決方案。那麼如何檢查該行是否真的被刪除? – JakeParis 2012-01-13 19:28:51

+1

也許'$ udb-> changes()> 0'是你在找什麼? http://www.php.net/manual/en/sqlite3.changes.php – seppo0010 2012-01-13 19:35:07

+0

@sepp:很完美。把它放在一個答案,我會給你的代表。 :) – JakeParis 2012-01-13 20:04:27