Jason Pruim schreef: > > On Jan 8, 2008, at 1:23 PM, Jochem Maas wrote: > >> Jason Pruim schreef: >>> Hi Everyone, >>> >>> Happy New Year a week late! :) >>> >>> I am trying to get more serious with my programming, I feel fairly >>> confident in my basic abilities except for one... Error checking. That's >>> what I'm trying to get figured out :) >>> >>> I have a script, that I am using to connect to my database, read, >>> insert, delete or edit the records in there. >>> >>> most of the time the script works perfectly, but on the occassion it >>> doesn't like when jupiters third moon aligns with uranus, I want the >>> user to be notified to take their head out of their ass... :) >>> >>> What I have tried is this: >>> >>> $querytest = "INSERT INTO current VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, >>> ?)"; >>> if ($stmt = mysqli_prepare($link, $querytest)) { >>> >>> >>> mysqli_stmt_bind_param($stmt, 'ssssssssss', $FName, $LName, $Add1, >>> $Add2, $City, $State, $Zip, $XCode, $Record, $Reason); >> >> it's possible that the binding fails. check the return value of >> mysqli_stmt_bind_param() and if an error status is returned log the error >> and don't try to execute. >> >>> //Add the record >>> mysqli_stmt_execute($stmt); >> >> again check the return value of the function you called (you beginning >> to see a pattern here with regard to error checking? ;-) >> >> you only need to print out (or log) an error if one actually occurred. >> additionally if mysqli_stmt_execute() returns an error code you can >> output >> a nice userfriendly message log the cryptic mysql error message, etc >> somewhere. >> >> e.g. >> >> if (!mysqli_stmt_execute($stmt)) { >> echo "SOMETHING BAD HAPPENED!"; >> error_log(mysqli_stmt_errno($stmt)); >> } >> >> hope you get the idea. > > Yeah I think I get the idea... Now I just need to figure out to do it > for sure :) this is what I have come up with so far: many ways to skin the cat - the basic idea is to check return values (and/OR relevant error related functions) at every turn to make sure things worked as expected (and do/log/output something suitable) > > $check = mysqli_stmt_error($stmt); > echo "<BR>$checkdate<BR>"; > if($check ==""){ > echo "Success! Redirect to first page"; > printf("%d Row Inserted.\n", mysqli_stmt_affected_rows($stmt)); > header("Location: index.php"); > } > else > { > echo " > Sorry for the inconvience, but something appears to be not > working correctly. <BR> > Please take a quick moment to send an e-mail to: <a > href=\"mailto:webmaster@xxxxxxxxxx\">webmaster@xxxxxxxxxx</A> to report > the error.<BR>"; > echo " > Please include:<BR> > What browser you are using.<br> > any text displayed on this page.<br>"; > printf("Error: %d.\n", mysqli_stmt_error($stmt)); > echo $checkdate; > > } > > //Close the statement > if(!$stmt){ I think that should be if ($stmt) { no point in closing is if it was never 'opened' properly in the first place (unless the docs say otherwise, in which case it should be unconditionally closed - possibly) > > mysqli_stmt_close($stmt); > } > > I'm sure I could do it better, and I'll be studying to figure out how > very shortly! > > Now I just need to make the query fail, but still connect to the > database to test it :) > >> >> >> >>> printf("Error: %d.\n", mysqli_stmt_errno($stmt)); >>> printf("%d Row Inserted.\n", mysqli_stmt_affected_rows($stmt)); >> >> you might want to output the actual error message (often more useful >> than a >> number) and also output the values you we're trying to submit to the DB. >> >> lastly consider logging to a file (e.g. error_log()) and log enough so >> that >> you build up a store of error data that you can use to help you track >> problems >> that are apparently cropping up occasionally >> >>> >>> >>> } >>> >>> //Close the statement >>> mysqli_stmt_close($stmt); >> >> you should only close the statement if it was actually prepared okay >> in the first place >> >> at it's most simple: >> >> if ($stmt) >> mysqli_stmt_close($stmt); >> >>> >>> >>> that was pulled off of the php.net site (For the most part) and adapted >>> slightly to meet my needs, and obviously I edited too much of it :) >>> >>> If anyone has any ideas I would appreciate it. Even RTFM as long as $M >>> is defined :) >>> >>> >>> >>> -- >>> >>> Jason Pruim >>> Raoset Inc. >>> Technology Manager >>> MQC Specialist >>> 3251 132nd ave >>> Holland, MI, 49424 >>> www.raoset.com >>> japruim@xxxxxxxxxx >>> >> >> > > -- > > Jason Pruim > Raoset Inc. > Technology Manager > MQC Specialist > 3251 132nd ave > Holland, MI, 49424 > www.raoset.com > japruim@xxxxxxxxxx > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php