php - 如果 ID 不在数据库中则插入记录,否则更新它

标签 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), 但我没有收到任何错误。问题似乎是插入前的“检查”。没有检查部分它工作正常但现在它没有插入任何东西。

最佳答案

问题

$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/

相关文章:

php - 从 PHP 解析 JSON 时出现问题

php - 将计数查询和获取查询合并为一个并让 MySQL 完成这项工作

mysql - 数据库结构建议

PHP PDO - 多个 x 字段的单个查询

php - 警告:mysqli_fetch_array()期望参数1为mysqli_result,在第15行的/public_html/access/login.php中给定的null

php - mysqli fetch_all() 不是一个有效的函数?

PHP5 : What PHP function outputs Users IP address, 平台和浏览器?

javascript - Laravel 统计本月的 IP 地址

MySQL,从文件加载数据到多个表中

python - 单击模态更新按钮后如何显示弹出窗口 "Success"或 "Error"