Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php和mysqli选择查询(如果存在),然后更新它,否则插入它_Php_Html_Mysql_Sql_Mysqli - Fatal编程技术网

php和mysqli选择查询(如果存在),然后更新它,否则插入它

php和mysqli选择查询(如果存在),然后更新它,否则插入它,php,html,mysql,sql,mysqli,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 i

我正在运行一个查询以检查数据库中是否存在现有值,如果它们确实存在,则更新它们,而不是重新插入它们

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

您在
$result
$results

$results = $rs->fetch_array(MYSQLI_ASSOC);
    // If not, let's add it to the database
    if(empty($result)){
                    ^
                   Here

由于未声明
$result
,因此它将始终为空,并且if部分将始终为true。

如果要正确防止重复,请创建一个唯一密钥(oauth\u提供程序,oauth\u uid)

然后使用INSERT ON DUPLICATE语句插入或更新行。


它正在将值重新插入数据库=重复行。。。我不想那样。
$result
$result
?因为你检查
empty($result)
试试这个答案:这会消除我最后的
else{update}
语句吗@naktibaldayes,它取代了代码中的选择、插入和更新。
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)