1

做这样的事情是否有效,我从来没有看到超过 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

4 回答 4

3

这有两个问题。

首先是您可以使用参数化查询。 看看PDO,这对你有很大帮助。这不仅对于多次插入更快,而且您不必担心 SQL 注入。

第二个是您可以使用MySQLON DUPLICATE KEY UPDATE为您处理这个问题。否则,当您的查询失败时,您不知道它失败的原因。这可能根本不是重复的关键问题!

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

于 2011-05-20T16:02:34.067 回答
0

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

您还应该考虑 mysql 的“重复键”机制。

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

于 2011-05-20T16:00:40.980 回答
0

它有效吗?是的。推荐吗?不。

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

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

$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 路径的可怕错误,如下所示:

致命错误:不能在第 688 行的 /check/out/my/directory/structure/wp-admin/includes/file.php 中使用重载对象或字符串偏移的分配操作运算符

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

于 2011-05-20T16:08:49.893 回答
0

您可能想查看 mysql 替换为语法

于 2011-05-20T16:46:04.203 回答