当前位置: 动力学知识库 > 问答 > 编程问答 >

php - MySQL update or insert or die query

问题描述:

Is it valid to do something like this, I never see more than 1 or operator:

$insert = 'INSERT into fhours (' .$cols . ') VALUES ('.$query.')';

$update = sprintf("UPDATE fhours SET %s WHERE fname='$fname' AND lname='$lname'", $field_list);

$result = $db->query($update) or $db->query($insert) or die('uhoh');`

网友答案:

There are two problems with this.

The first is that you can be using parameterized queries. Look at PDO, this will help you greatly. Not only is this faster for multiple inserts, but you don't have to worry about SQL injection so much.

The second is that you can use MySQL's ON DUPLICATE KEY UPDATE to take care of this issue for you. Otherwise, when your query fails, you don't know why it failed. It may not have been a duplicate key issue at all!

Other than that, the code from the standpoint of or is just fine.

网友答案:

You can chain as many logical operators as you like.

You should also take into consideration the "on duplicate key" mechanisms of mysql.

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

网友答案:

Is it valid? Yes. Is it recommended? No.

The problem with die()-ing from failed SQL query is what the user ends up seeing, which is a horrible screen with potentially nothing but a small amount of text. That's very bad.

Instead, you should be handling these errors in a way that you can pass on the failure of completion to the user:

$update_result = $db->query($update);
if(!$update_result) {
  // Yikes! Tell the user something went wrong!
  // Show them an error page or error message
}

$insert_result = db->query($insert);
if(!$insert_result) {
  // Yikes! Tell the user something went wrong!
  // Show them an error page or error message
}

In fact, it's also recommended to take a look into set_error_handler, which lets you capture fatal PHP errors and instead of showing horrible errors that potentially exposure your php path like this:

Fatal error: Cannot use assign-op operators with overloaded objects nor string offsets in /check/out/my/directory/structure/wp-admin/includes/file.php on line 688

You can send them to a general error page, which looks a lot more professional.

网友答案:

You might want to look into the mysql replace into syntax

分享给朋友:
您可能感兴趣的文章:
随机阅读: