我正在尝试将数据插入我的数据库。我可以使用 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)
,
但我没有收到任何错误。问题似乎是插入前的“检查”。没有检查部分它工作正常但现在它没有插入任何东西。
最佳答案
问题
$db->query()
返回一个(可能为空)mysqli_result
目的。所以 empty($check)
的计算结果为 false
(因为 empty($var)
仅当 $var
为零时才返回 true
, false
, 一个空字符串, 一个空数组或null
),因此执行一个UPDATE
,不管是否有相应的id
或不是。
要检查是否有记录,您必须使用 $check->num_rows
来获取包含 id
的记录数。
更好
ON DUPLICATE KEY UPDATE
命令应该适合你。
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
(或 primary key
)时有效.
安全
您使用 SQL 命令的方式容易受到 SQL 注入(inject)攻击。你应该使用 prepared statements .
使用准备好的语句,您的代码将如下所示:
$stmt = $db->prepare("INSERT INTO users (Fuid, Ffname, Femail)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE users
SET Ffname = ?, Femail = ?");
$stmt->bind_param('issss',$fuid_db,$ffname_db, $femail_db,$ffname_db, $femail_db)
$stmt->execute();
关于php - 如果 ID 不在数据库中则插入记录,否则更新它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30395347/