2016-07-23 3 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 .. дублирование 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)" 

В этом случае вам не нужно будет связывать имя пользователя и RealName 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

steam id - user_id? .. убедитесь, что у вас есть правильное значение в $ steamprofile ['steamid'] ..eg: using var_dump ($ steamprofile ['steamid']); а затем проверить на $ duplicate, например: var_dump ($ duplicate); – scaisEdge

Смежные вопросы