php - 将查询结果与当前用户进行比较

标签 php mysql

每次用户第一次登录时,我都会保存一些关于他们的信息。如果用户已经有条目并且条目已过时,则应更新它。我的问题是试图将用户与数据库进行比较,看看他们是否已经有一个条目。我成功地记录了用户的详细信息,但每次用户登录时它都会这样做。您可以在下面找到我的代码。

$conn = new mysqli('host', 'user', 'password', 'db');
if ($conn->connect_error) {
    die("Error; Contact Support!");
}

$stmt = $conn->prepare("select * from users where steamid=? ");
$stmt->bind_param('s', $steamprofile['steamid']);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($res);
$duplicate = mysqli_num_rows($res);
if ($duplicate == 0) {
    $stmt1 = $conn->prepare("REPLACE INTO `users` SET `steamid` = ?,`realname` = ?,`username` = ?");
    $stmt1->bind_param('sss', $steamprofile['steamid'], $steamprofile['realname'], $steamprofile['personaname']);
    $stmt1->execute();
    $stmt1->store_result();
    $stmt1->bind_result($res1);
    if ($res1 === TRUE) {
        echo "";
    }
    $stmt1->close();
    $stmt->close();
    mysqli_close($conn);
}

最佳答案

您可以通过简单地使用 INSERT .. ON DUPLICATE KEY UPDATE 来避免所有这些复杂的逻辑:

$conn = new mysqli('host', 'user', 'password', 'db');
if ($conn->connect_error) {
    die("Error; Contact Support!");
}

$query = "INSERT INTO `users` SET `steamid` = ?,`realname` = ?,`username` = ? ON DUPLICATE KEY UPDATE realname=? , username=?"
$stmt1 = $conn->prepare($query);
$stmt1->bind_param('sssss', $steamprofile['steamid'], 
        $steamprofile['realname'], $steamprofile['personaname'], 
        $steamprofile['realname'], $steamprofile['personaname']);
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($res1);
if ($res1 === TRUE) {
    echo "";
}
$stmt1->close();
mysqli_close($conn);

您完全无需先运行查询来查明记录是否已存在。

另请注意,查询也可以写成

$query = "INSERT INTO `users` SET `steamid` = ?,`realname` = ?,`username` = ? ON DUPLICATE KEY UPDATE realname=VALUES(realname) , username=VALUES(username)"

在这种情况下,您不需要将用户名和真实姓名参数绑定(bind)两次。

请注意,这也优于 REPLACE INTO,因为替换会导致整行被替换,而不是仅更新一列。因此 REPLACE INTO 可能导致必须重新计算索引。

关于php - 将查询结果与当前用户进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38539369/

相关文章:

php - 在 Symfony 测试中控制依赖关系

php - 简单的破旧,全面的 phpDocumentor 教程?

php - 使用 set_error_handler 时可以获得更有意义的文件和行信息吗?

mysql - 将所有记录保留在 "WHERE IN()"子句中,即使找不到

php - 将 PHP 和 Sql 与 Python 混合使用

php - 当 where 子句中的日期时间介于之间时 MySQL 查询速度慢

javascript - 使用javascript将值从php页面传递到html页面

php - Laravel Eloquent/Fluent 选择每组前 1 行

php - 即使没有条件,Laravel QUERY 也不会产生任何结果

mysql - 带有主要 NOT IN 的 SQL 查询不起作用