2012-01-13 151 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