Volgens de php manual zou een 'execute' op een 'Statement' een 'false' moeten teruggeven als er iets fout gaat. Als ik in m'n MySQL client de query uit onderstaand stukje code uitvoer met een 'mykey' die niet bestaat in de tabel, dan krijg ik een error (code 1054). Ik verwacht dat de exucute dan false zou moeten geven en dat php dan de exception throwd.
Klopt dit gedrag? Het blijkt wel mogelijk te zijn om de affected_rows op te vragen en als dat 0 is, mag je er van uit gaan dat er iets fout ging... Lijkt een beetje een omweg. Is dit een bug of mis ik iets?
Een andere, zijdelings gerelateerde vraag: is dit soort code traag in vergelijking met de standaard mysql?
Ik draai hier MySQL 5.0.18 en PHP 5.1.2 in combinatie met MySQL-Improved.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| try { $oConnection = DbConnection::connect(); $stmt = $oConnection->stmt_init(); if ($stmt->prepare("update mytable set myfield=1 where mykey=?")) { $stmt->bind_param("s", $sMyKey); if (!$stmt->execute()) { throw new QueryFailedException($oConnection->error); } } $stmt->close(); DbConnection::close($oConnection); } catch (Exception $e) { // something went wrong... } |
Klopt dit gedrag? Het blijkt wel mogelijk te zijn om de affected_rows op te vragen en als dat 0 is, mag je er van uit gaan dat er iets fout ging... Lijkt een beetje een omweg. Is dit een bug of mis ik iets?
Een andere, zijdelings gerelateerde vraag: is dit soort code traag in vergelijking met de standaard mysql?
Ik draai hier MySQL 5.0.18 en PHP 5.1.2 in combinatie met MySQL-Improved.
[ specs ] [ Tweaker gallery ]