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

Posted on 2006-07-20
Last Modified: 2013-12-12
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!
Question by:hmaloney
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
  • 2
  • +1
LVL 35

Assisted Solution

Raynard7 earned 250 total points
ID: 17151432
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";

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

Author Comment

ID: 17151461
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.
LVL 40

Expert Comment

by:Richard Quadling
ID: 17152291
You are using a SELECT, this is NOT going to update anything!!!
Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.


Author Comment

ID: 17152317
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!
LVL 40

Expert Comment

by:Richard Quadling
ID: 17152471
What is the value of $result when the query fails?

Expert Comment

ID: 17152643
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');
LVL 40

Expert Comment

by:Richard Quadling
ID: 17152668
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!

Accepted Solution

SysTurn earned 150 total points
ID: 17152711
@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
LVL 40

Expert Comment

by:Richard Quadling
ID: 17152845
hmaloney, what actually happens at the moment?

Author Comment

ID: 17153072
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.
LVL 40

Assisted Solution

by:Richard Quadling
Richard Quadling earned 100 total points
ID: 17153133
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.

Author Comment

ID: 17162835
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!

Featured Post

Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

These days socially coordinated efforts have turned into a critical requirement for enterprises.
This article discusses four methods for overlaying images in a container on a web page
The viewer will learn how to count occurrences of each item in an array.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

626 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question