Bug #81376 [Com]: fetchArray refuses to work with UPDATE ... RETURNING

From: Date: Tue, 02 May 2023 18:34:44 +0000
Subject: Bug #81376 [Com]: fetchArray refuses to work with UPDATE ... RETURNING
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-244348@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81376&edit=1 ID: 81376 Comment by: sethwilson19 at aol dot com Reported by: abrahin dot andrei at yandex dot ru Summary: fetchArray refuses to work with UPDATE ... RETURNING Status: Verified Type: Bug Package: SQLite related Operating System: Arch Linux PHP Version: 8.0.9 Block user comment: N Private report: N New Comment: (https://collegegrazing.com/)github.com (https://collegegrazing.com/blog/)github.com (https://collegegrazing.com/affiliate-disclosure/)github.com (https://collegegrazing.com/terms-of-use/)github.com (https://collegegrazing.com/fake-id/best-fake-id-websites/)github.com (https://collegegrazing.com/about/)github.com (https://collegegrazing.com/contact/)github.com (https://collegegrazing.com/fake-id/)github.com (https://collegegrazing.com/fake-id/buy-fake-ids/)github.com (https://collegegrazing.com/how-to-get-a-fake-id/)github.com (https://collegegrazing.com/top-fake-id-review/)github.com (https://collegegrazing.com/fake-id/buy-virginia-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-new-mexico-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-kentucky-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-iowa-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-maine-fake-id/)github.com (https://collegegrazing.com/all-state-fakes-review/)github.com (https://collegegrazing.com/fake-id/buy-colorado-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-missouri-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-new-hampshire-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-vermont-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-georgia-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-arizona-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-alabama-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-florida-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-maryland-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-wyoming-fake-id/)github.com (https://collegegrazing.com/fake-id/what-happens-if-i-get-caught/)github.com (https://collegegrazing.com/fake-id/buy-california-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-new-york-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-alaska-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-rhode-island-fake-id/)github.com (https://collegegrazing.com/magic-fake-id-review/)github.com (https://collegegrazing.com/fake-id/buy-utah-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-hawaii-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-minnesota-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-oklahoma-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-illinois-fake-id/)github.com (https://collegegrazing.com/evolved-ids-review/)github.com (https://collegegrazing.com/fake-id/buy-indiana-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-montana-fake-id/)github.com (https://collegegrazing.com/how-do-bouncers-spot-fake-ids/)github.com (https://collegegrazing.com/fake-id/common-uses/)github.com (https://collegegrazing.com/fake-id/buy-arkansas-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-pennsylvania-fake-id/)github.com (https://collegegrazing.com/blog/page/2/)github.com (https://collegegrazing.com/fake-id/buy-new-jersey-fake-id/)github.com (https://collegegrazing.com/how-to-spot-a-georgia-fake-id/)github.com (https://collegegrazing.com/scannable-fake-ids/)github.com (https://collegegrazing.com/fake-id/buy-south-dakota-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-massachusetts-fake-id/)github.com)github.com (https://collegegrazing.com/fake-id/how-to-spot/)github.com (https://collegegrazing.com/fake-id/buy-west-virginia-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-connecticut-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-wisconsin-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-idaho-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-columbia-fake-id/)github.com (https://collegegrazing.com/fake-id/how-to-make/)github.com (https://collegegrazing.com/fake-id/buy-mississippi-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-nevada-fake-id/)github.com (https://collegegrazing.com/how-to-pay-for-fake-id/)github.com (https://collegegrazing.com/how-to-take-a-fake-id-photo-at-home/)github.com (https://collegegrazing.com/fake-id/buy-oregon-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-texas-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-north-dakota-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-louisiana-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-south-carolina-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-kansas-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-tennessee-fake-id/)github.com (https://collegegrazing.com/fake-id/types-of-fake-ids/)github.com (https://collegegrazing.com/fake-id/buy-delaware-fake-id/)github.com (https://collegegrazing.com/lost-identification-review/)github.com (https://collegegrazing.com/fake-id/buy-washington-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-nebraska-fake-id/)github.com (https://collegegrazing.com/dingo-fakes-review/)github.com (https://collegegrazing.com/fake-id/buy-north-carolina-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-michigan-fake-id/)github.com (https://collegegrazing.com/fake-id/buy-ohio-fake-id/)github.com (https://collegegrazing.com/fake-id/best-states/)github.com (https://collegegrazing.com/idviking-review/)github.com (https://collegegrazing.com/super-printer-bros-review/)github.com (https://collegegrazing.com/idgod-review/)github.com (https://collegegrazing.com/bogus-braxtor-review/)github.com (https://collegegrazing.com/newids-review/)github.com (https://collegegrazing.com/litfakes-review/)github.com (https://collegegrazing.com/old-ironside-fakes-review/)github.com (https://collegegrazing.com/idhurry-review/)github.com Previous Comments: ------------------------------------------------------------------------ [2021-08-25 14:18:41] cmb@php.net @nikic, see <https://github.com/php/php-src/pull/5204>. TL;DR: we *need* to drop SQLite3Result altogether. ------------------------------------------------------------------------ [2021-08-25 09:05:30] nikic@php.net @cmb PDO uses a flag to skip the next step without resetting, maybe we should do that in sqlite3 as well? ------------------------------------------------------------------------ [2021-08-23 12:25:27] cmb@php.net > I expected to see a row full of data and enjoy the possibilities > provided by the SQLite v3.36.0 Use PDO_SQLite instead. :) ------------------------------------------------------------------------ [2021-08-23 12:23:01] cmb@php.net I can confirm the issue. It has the same root cause as bug #64531, namely that SQLite3::execute() already calls sqlite3_step() to learn if there is a result set or not, and then resets the statement to be able to start from the beginning. This doesn't work for DML statements, though. I think the only way forward to fix this issue and some others, would be to drop SQLite3Result altogether, and to move its methods to SQLite3Statement. Serious BC break, though. ------------------------------------------------------------------------ [2021-08-21 19:39:40] abrahin dot andrei at yandex dot ru Description: ------------ --- From manual page: https://php.net/sqlite3result.fetcharray --- SQLite3Result::fetchArray() returns FALSE on 'UPDATE ... RETURNING ...' even if some rows were affected. Please note that this interface is fully supported since v3.35, and i have v3.36 installed (as evidenced by output of SQLite3::version()). https://www.sqlite.org/lang_returning.html https://www.sqlite.org/lang_update.html Test script: --------------- $GLOBALS['db'] = new SQLite3('testdb.sqlite'); $db->exec('CREATE TABLE IF NOT EXISTS cron (time INTEGER, type INTEGER, private TEXT'); $db->exec('INSERT INTO cron (time, type, private) VALUES (3, 1, 0)'); $stmt = $db->prepare('UPDATE cron SET time = 10 WHERE time < 10 RETURNING *;'); $res = $stmt->execute(); var_dump($res->fetchArray()); # <-- returns false, should instead return a row Expected result: ---------------- I expected to see a row full of data and enjoy the possibilities provided by the SQLite v3.36.0 Actual result: -------------- bool(false) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=81376&edit=1

« previous php.bugs (#244348) next »