如果ID不在数据库中,则插入记录并以其他方式更新

时间:2015-05-22 11:18:45

标签: php mysql mysqli

我试图将数据插入我的数据库。我可以使用INSERT INTO插入它。但是我想检查一下,如果数据库已经有了ID,那么我希望它只是更新记录。

$check = $db->query("SELECT Fuid FROM users WHERE Fuid='$fuid_db'");

//IF the user is new
if(empty($check))
{
  $insert = $db->query("INSERT INTO users (Fuid, Ffname, Femail) VALUES ('$fuid_db', '$ffname_db', '$femail_db'");
} 
else 
{ 
//ELSE update the information
  $update = $db->query("UPDATE users SET Ffname='$ffname_db', Femail='$femail_db' WHERE Fuid='$fuid_db'");
}

为什么这不起作用?我使用ERROR_REPORTING(E_ALL), 但我没有收到任何错误。似乎问题是"检查"在插入之前。没有检查部分它工作正常,但现在它没有插入任何东西。

2 个答案:

答案 0 :(得分:1)

问题

$db->query()返回一个(可能为空)mysqli_result个对象。因此,empty($check)评估为false(因为empty($var)仅在true为零,$var,空字符串,空数组或false)因此无论是否存在相应的null,都会执行UPDATE

要检查是否有记录,您必须使用id来获取包含$check->num_rows的记录数。

更好

ON DUPLICATE KEY UPDATE命令应该适合您。

id

这样您就不必先创建INSERT INTO users (Fuid, Ffname, Femail) VALUES ('$fuid_db', '$ffname_db', '$femail_db') ON DUPLICATE KEY UPDATE users SET Ffname = '$ffname_db', Femail = '$femail_db' ,这样可以减少数据库调用次数。

注意:仅当SELECT设置为Fuid(或unique key)时才有效。

安全

使用SQL命令的方式容易受到SQL注入的攻击。您应该使用prepared statements

使用预准备语句,您的代码如下所示:

primary key

答案 1 :(得分:0)

首先,出于安全原因,您不应该以这种方式插入值。 但是,如果我们暂时忽略它,您可以使用ON DUPLICATE KEY UPDATE,如下所示,前提是Fuid是主键

INSERT INTO users (Fuid, Ffname, Femail) VALUES ('$fuid_db', '$ffname_db', '$femail_db') 
ON DUPLICATE KEY UPDATE users SET Ffname = '$ffname_db', Femail = '$femail_db'