Prev: Compile php5-sybase_ct-5.2.9 with freetds-devel-0.82.1_1,1in FreeBSD ports will Failed!
Next: Fix your corrupted tables / ibdata1 problem
From: "Filipe Martins" on 6 Apr 2009 07:15 Hello. I have a doubt about mysqli_multi_query and I couldn't find anything on the Internet addressing it. I think that mysqli_multi_query should execute all statements even if some of them fail. As far as I can tell this doesn't happen. The function stops returning results the moment it finds an error. I attached a test file proving my point. I ask your help for figuring out if this is a bug, a limitation of the function, or if simply it's my mistake. Thanks to all. Filipe Martins http://www.maisqi.com ----------------------------------------------------------------------------------------------------------------------- Send big files for free. Simple steps. No registration. Visit now http://www.nawelny.com
From: Chris on 6 Apr 2009 18:57 Filipe Martins wrote: > Hello. > I have a doubt about mysqli_multi_query and I couldn't find > anything on the Internet addressing it. > I think that mysqli_multi_query should execute all statements > even if some of them fail. As far as I can tell this doesn't > happen. The function stops returning results the moment it finds > an error. The same happens in php, c, bash, java and everything else. <?php function do_stuff() { echo "in do_stuff\n"; return false; } function do_more_stuff() { echo "in do_more_stuff\n"; return true; } if (do_stuff() && do_more_stuff()) { echo "all done!\n"; } do_more_stuff() will never run because do_stuff() is broken returns a non-success status. This behaviour would be driven by mysql anyway, not php - the same thing happens in postgres (where I can include an example more easily). # begin; BEGIN Time: 0.723 ms *# select now(); now ------------------------------- 2009-04-07 08:52:07.986149+10 (1 row) Time: 99.173 ms *# select field_from_table; ERROR: column "field_from_table" does not exist LINE 1: select field_from_table; ^ !# select now(); ERROR: current transaction is aborted, commands ignored until end of transaction block The whole thing is aborted because of the error. > I attached a test file proving my point. I ask your help for > figuring out if this is a bug, a limitation of the function, or > if simply it's my mistake. The mailing list doesn't accept attachments, you'll need to include it inline with your email (as long as it's not too long) or place it somewhere for everyone to see and send us a link. -- Postgresql & php tutorials http://www.designmagick.com/
From: "Filipe Martins" on 7 Apr 2009 10:45 Thanks for responding, Chris. If I understand you right, you're saying that this is MySQL API issue, right? But do you agree that mysqli_multi_query should at least accept a parameter to configure how to treat errors -- for example: RESUME_ON_ERROR, or ABORT_ON_ERROR? If you and other's in this list share my view on this I'll send a feature suggestion to MySQL AB. Here goes my my test script: <?php /// Filipe Martins MAISQI.COM [2009-04-06] /// http://www.maisqi.com /// /// I'm trying to demonstrate that 'mysqli_multi_query' aborts all the following statements /// after an error. Or maybe it runs it but ignores the results. Didn't test this possibilitie. /// /// I think it should report the error but continue working. Better yet, there should be a way /// for us to control this behavior. /// $host = 'localhost'; $user = 'root'; $pwd = '36981613'; $db = 'test'; $conn = mysqli_connect ($host, $user, $pwd, $db); // The 2nd statement should fail but he others should work. $sql = "SELECT -1;SELECT 0 FROM xyzzyz;SELECT 123;SELECT 'All ok'"; $res = mysqli_multi_query ($conn, $sql); $i = 0; do { ++$i; // Let's read this result. if ($res = mysqli_store_result ($conn)) { $a = mysqli_fetch_row ($res); $s = print_r ($a, true); echo "Statement #$i worked: $s\n<br />"; mysqli_free_result ($res); } else echo "Statement #$i failed\n<br />"; // Try to read until there's no more. } while (mysqli_next_result ($conn) || mysqli_more_results ($conn)); echo "\n<br />"; if ($i < 4) echo "We finished quite early, didn't we?!\n<br />"; else echo "What?? It worked?!\n<br />"; Chris writes: > Filipe Martins wrote: >> Hello. >> I have a doubt about mysqli_multi_query and I couldn't find >> anything on the Internet addressing it. >> I think that mysqli_multi_query should execute all statements >> even if some of them fail. As far as I can tell this doesn't >> happen. The function stops returning results the moment it finds >> an error. > > The same happens in php, c, bash, java and everything else. > > <?php > function do_stuff() > { > echo "in do_stuff\n"; > return false; > } > > function do_more_stuff() > { > echo "in do_more_stuff\n"; > return true; > } > > if (do_stuff() && do_more_stuff()) { > echo "all done!\n"; > } > > do_more_stuff() will never run because do_stuff() is broken returns a > non-success status. > > This behaviour would be driven by mysql anyway, not php - the same thing > happens in postgres (where I can include an example more easily). > > # begin; > BEGIN > Time: 0.723 ms > > *# select now(); > now > ------------------------------- > 2009-04-07 08:52:07.986149+10 > (1 row) > > Time: 99.173 ms > > *# select field_from_table; > ERROR: column "field_from_table" does not exist > LINE 1: select field_from_table; > ^ > !# select now(); > ERROR: current transaction is aborted, commands ignored until end of > transaction block > > The whole thing is aborted because of the error. > >> I attached a test file proving my point. I ask your help for >> figuring out if this is a bug, a limitation of the function, or >> if simply it's my mistake. > > The mailing list doesn't accept attachments, you'll need to include it > inline with your email (as long as it's not too long) or place it > somewhere for everyone to see and send us a link. > > -- > Postgresql & php tutorials > http://www.designmagick.com/ > > > -- > PHP Database Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > ----------------------------------------------------------------------------------------------------------------------- Send big files for free. Simple steps. No registration. Visit now http://www.nawelny.com
From: Chris on 7 Apr 2009 18:42 Filipe Martins wrote: > Thanks for responding, Chris. > If I understand you right, you're saying that this is MySQL API > issue, right? I assume it's handled by the database itself and not php. You could try a different script (eg python, ruby, perl, whatever else can talk to mysql) to see if that theory is correct. > But do you agree that mysqli_multi_query should at > least accept a parameter to configure how to treat errors No, I don't agree with that. -- Postgresql & php tutorials http://www.designmagick.com/
From: "Filipe Martins" on 8 Apr 2009 04:38
Thanks again for responding. I'd also welcome opinions from other members of this list... Chris writes: > Filipe Martins wrote: >> Thanks for responding, Chris. >> If I understand you right, you're saying that this is MySQL API >> issue, right? > > I assume it's handled by the database itself and not php. You could try a > different script (eg python, ruby, perl, whatever else can talk to mysql) > to see if that theory is correct. > >> But do you agree that mysqli_multi_query should at >> least accept a parameter to configure how to treat errors > > No, I don't agree with that. > > -- > Postgresql & php tutorials > http://www.designmagick.com/ > ----------------------------------------------------------------------------------------------------------------------- Send big files for free. Simple steps. No registration. Visit now http://www.nawelny.com |