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

-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to