我正在运行查询以检查我的数据库中是否存在现有值,如果它们存在则更新它们不会重新插入它们。
目前我的代码只是将值重新插入到表中而不是更新它们,这意味着我的代码永远不会到达我的语句的else部分。
if(isset($user_info->error)){
// Something's wrong, go back
header('Location: twitter_login.php');
}
else {
// Let's find the user by its ID
$query = ("SELECT * FROM twitter WHERE oauth_provider = 'twitter' && oauth_uid = '".$user_info->id."'");
$rs=$mysql->query($query);
$results = $rs->fetch_array(MYSQLI_ASSOC);
// If not, let's add it to the database
if(empty($result)){
$query = ("INSERT INTO twitter (oauth_provider, oauth_uid, username, oauth_token, oauth_secret)
VALUES ('twitter', {$user_info->id}, '{$user_info->screen_name}', '{$access_token['oauth_token']}', '{$access_token['oauth_token_secret']}')");
$rs=$mysql->query($query);
$insert = ("SELECT * FROM twitter WHERE id = " . mysqli_insert_id($mysql));
$rs=$mysql->query($insert);
$results = $rs->fetch_array(MYSQLI_ASSOC);
}
else{
// Update the tokens
$update = ("UPDATE twitter SET oauth_token = '{$access_token['oauth_token']}',
oauth_secret = '{$access_token['oauth_token_secret']}'
WHERE oauth_provider = 'twitter' AND oauth_uid = {$user_info->id}");
$rs=$mysql->query($update);
$rs->close();
}
答案 0 :(得分:1)
您在$result
和$results
$results = $rs->fetch_array(MYSQLI_ASSOC);
// If not, let's add it to the database
if(empty($result)){
^
Here
因为$result
在它始终为空之前未被声明,而且if部分将始终为真。
答案 1 :(得分:1)
如果要正确防止重复,请创建一个UNIQUE KEY(oauth_provider,oauth_uid);
然后使用INSERT ON DUPLICATE语句插入或更新行。 http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html
INSERT INTO twitter (oauth_provider, oauth_uid, username, oauth_token, oauth_secret)
VALUES ('twitter', {$user_info->id}, '{$user_info->screen_name}', '{$access_token['oauth_token']}', '{$access_token['oauth_token_secret']}')
ON DUPLICATE KEY UPDATE oauth_token = VALUES(oauth_token), oauth_secret = VALUES(oauth_secret)