php和mysqli SELECT查询是否存在,然后更新它,否则插入它

时间:2014-07-25 14:11:08

标签: php html mysql sql mysqli

我正在运行查询以检查我的数据库中是否存在现有值,如果它们存在则更新它们不会重新插入它们。

目前我的代码只是将值重新插入到表中而不是更新它们,这意味着我的代码永远不会到达我的语句的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();
}

2 个答案:

答案 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)