我试图将数据插入我的数据库。我可以使用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)
,
但我没有收到任何错误。似乎问题是"检查"在插入之前。没有检查部分它工作正常,但现在它没有插入任何东西。
答案 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'