Need to display errors on a bulk insert loop, but then continue processing inserts

I'm doing a bulk insert of data into a postgreSQL db using PHP.  What I would like to do is display any errors, and then continue processing.  I am checking for the obvious things before attempting the insert, but things like unique key violation in the database can still cause the insert to fail.

Can someone please help me to display the error, and then continue on.  Here's my code:

                  foreach ($lines as $line) {
            $customer_record = explode(",",trim($line));
            $cc = $customer_record[0];
            $first = $customer_record[1];
            $surn = $customer_record[2];
            $salut = $customer_record[3];
            $email = $customer_record[4];
            if ($email != '') {
                  $query = "select * from customer_new($myCID, '$cc', '$first', '$surn', '$salut', '$email')";
                  $result = my_query($dbconn,$query,'Adding records','error.html'); // ********** this is where it currently falls over.
                  if ($row = pg_fetch_assoc($result)) {  
                          $count = $count + 1;
                              } else {
                       echo "<p>Error occured when loading: ".$first." ".$surn." - ".$email."</p>";  // **** this never executes
                  }
            } else {
                  echo "<p>Error:  The email address for $first $surn was empty.</p>";
            }
            $email = '';
            
      }

Thanks heaps!
hmaloneyAsked:
Who is Participating?
 
SysTurnCommented:
@RQuadling : I know it's will not ignore Fatal Errors, but the the "DB update error" is not a Fatal Errors which will happen as I said inside the my_query() function, so I guess it can help. and I dont also think there are Fatal Errors inside that function or the Try Catch thing would work in the first place.

Kind Regards
Bakr
0
 
Raynard7Commented:
You can catch exceptions using
Try and Catch blocks

The manual uses the below example;

try {
   $error = 'Always throw this error';
   throw new Exception($error);

   // Code following an exception is not executed.
   echo 'Never executed';

} catch (Exception $e) {
   echo 'Caught exception: ',  $e->getMessage(), "\n";
}

http://au.php.net/manual/en/language.exceptions.php

You can use this around your queries that are failing and write $e->getMessage() to an array $error[] =
And then loop through all the error messages
0
 
hmaloneyAuthor Commented:
I've already tried using try catch and it ignores it... I've also read within Experts Exchange that exceptions thrown by a DB update not actually exceptions in the PHP sense, and therefore this wont work.
0
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

 
Richard QuadlingSenior Software DeveloperCommented:
You are using a SELECT, this is NOT going to update anything!!!
0
 
hmaloneyAuthor Commented:
No I'm not.  :-)

There's an inbuilt function (abstraction) being called which looks like a select, but it is actually doing an insert.

Please ignore that part of the code; it's all working.

The bit that isn't is trying to stop the page from crashing when one particular call to the database function doesn't work.

Thanks for looking though!
0
 
Richard QuadlingSenior Software DeveloperCommented:
What is the value of $result when the query fails?
0
 
SysTurnCommented:
You can use the @ character with my_query() function to force PHP ignore any errors inside that function and continue the loop

@my_query($dbconn,$query,'Adding records','error.html');
0
 
Richard QuadlingSenior Software DeveloperCommented:
No @ will NOT force PHP to "ignore" the errors. If a fatal error occurs in the execution, it will terminate.

The @ only suppresses the message. The error STILL HAPPENED. You just told PHP to bury its head in the sand!
0
 
Richard QuadlingSenior Software DeveloperCommented:
hmaloney, what actually happens at the moment?
0
 
hmaloneyAuthor Commented:
The @ wont work in front of the my_query command.  

I've gone back to the programmer who put together the my_query functionality, and I'm expecting that they will be able to provide me with the code to handle the errors.
0
 
Richard QuadlingSenior Software DeveloperCommented:
The @ will only suppress PHP's own error messaging. If the function raises PHP errors,then @ will work.

What is the value of $result when the code fails? That is what you need to test.

Maybe just output it for the time being ...

echo var_export($result, True) . '<br />';

sort of thing.

That way you can see what you need to test to determine if it worked or not.
0
 
hmaloneyAuthor Commented:
The code that I was using was changed so that errors from the database are handled better, and the loop can move onto the next without exiting.  

Thanks for all your input!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.