做这样的事情是否有效,我从来没有看到超过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');`
答案 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替换为语法