Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

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

Posted on 2006-07-20
12
Medium Priority
?
224 Views
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!
0
Comment
Question by:hmaloney
[X]
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
12 Comments
 
LVL 35

Assisted Solution

by:Raynard7
Raynard7 earned 750 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";
}

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
 

Author Comment

by:hmaloney
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.
0
 
LVL 40

Expert Comment

by:Richard Quadling
ID: 17152291
You are using a SELECT, this is NOT going to update anything!!!
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:hmaloney
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!
0
 
LVL 40

Expert Comment

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

Expert Comment

by:SysTurn
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');
0
 
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!
0
 
LVL 6

Accepted Solution

by:
SysTurn earned 450 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
Bakr
0
 
LVL 40

Expert Comment

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

Author Comment

by:hmaloney
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.
0
 
LVL 40

Assisted Solution

by:Richard Quadling
Richard Quadling earned 300 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.
0
 

Author Comment

by:hmaloney
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!
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

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

There are times when I have encountered the need to decompress a response from a PHP request. This is how it's done, but you must have control of the request and you can set the Accept-Encoding header.
Originally, this post was published on Monitis Blog, you can check it here . In business circles, we sometimes hear that today is the “age of the customer.” And so it is. Thanks to the enormous advances over the past few years in consumer techno…
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

718 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