2016-07-23 49 views
1

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

$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); 
} 

回答

0

您可以通过简单地使用INSERT ..对重复密钥更新避免所有这些复杂的逻辑:

$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)" 

你就不需要用户名绑定和真实姓名PARAMS两倍的情况。

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

0

可能是你有一个错字

duplicate = mysqli_num_rows($res); 

,而不是

$duplicate = mysqli_num_rows($res); 

(但这应该不会引发错误?)

您使用

("REPLACE INTO `users` SET `steamid` = ?,`realname` = ?,`username` = ?") 

我认为你应该使用新的用户和更新INSERT现有用户

("INSERT INTO `users` (`steamid`,`realname`, `username`) values(?, ?,?") 

("UPDATE `users` SET `steamid` = ?,`realname` = ?,`username` = ? 
    WHERE `your_user_id` = ? ") 
+0

'$ duplicate',不管信不信,都不会引发任何错误。对于如何查看用户是否已经拥有数据库条目,我没有丝毫的线索,但这是我的悲哀尝试。 @scaisEdge – Nhabbott

+0

蒸汽id是user_id? ..确保你在$ steamprofile ['steamid'] ..eg中有适当的值:使用var_dump($ steamprofile ['steamid']);然后检查$ duplicate,例如:var_dump($ duplicate); – scaisEdge

相关问题