MySQL更新或插入或死亡查询

时间:2011-05-20 15:58:03

标签: php mysql insert die

做这样的事情是否有效,我从来没有看到超过1或运算符:

$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');`

4 个答案:

答案 0 :(得分:3)

这有两个问题。

首先,您可以使用参数化查询。 Look at PDO, this will help you greatly。对于多个插入,这不仅更快,而且您不必担心SQL注入太多。

第二,您可以使用MySQL's ON DUPLICATE KEY UPDATE来解决此问题。否则,当您的查询失败时,您不知道它失败的原因。它可能不是一个重复的关键问题!

除此之外,从or的角度来看代码就好了。

答案 1 :(得分:0)

您可以根据需要链接任意数量的逻辑运算符。

你还应该考虑mysql的“on duplicate key”机制。

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

答案 2 :(得分:0)

有效吗?是。推荐吗?否。

die()来自失败的SQL查询的问题是用户最终看到的问题,这是一个可怕的屏幕,可能只有少量文本。那非常糟糕。

相反,您应该以一种可以将完成失败传递给用户的方式处理这些错误:

$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
}

事实上,我们还建议您查看set_error_handler,它可以捕获致命的PHP错误,而不是显示可能会像这样暴露您的php路径的可怕错误:

  

致命错误:无法使用assign-op   具有重载对象的运算符   字符串偏移量   /check/out/my/directory/structure/wp-admin/includes/file.php   在第688行

您可以将它们发送到一般错误页面,该页面看起来更专业。

答案 3 :(得分:0)

您可能希望查看mysql替换为语法