php - MySQL 获取数组错误

标签 php mysql

Possible Duplicate:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

我收到以下 PHP 错误:

警告:mysql_fetch_array():提供的参数不是/hermes/web03/b556/pow.kkarimu/htdocs/F12_MEDIA/Site/develop/v1/twitter/twitter_oauth.php 第 32 行中的有效 MySQL 结果资源

警告:mysql_fetch_array():提供的参数不是/hermes/web03/b556/pow.kkarimu/htdocs/F12_MEDIA/Site/develop/v1/twitter/twitter_oauth.php 第 38 行中的有效 MySQL 结果资源

从这个 php 文件:

 $query = mysql_query("SELECT * FROM users_entity WHERE oauth_provider = 'twitter' AND oauth_id = ".$user_info->id);
    $result = mysql_fetch_array($query);

    // If not, let's add it to the database
    if(empty($result)){
        $query = mysql_query("INSERT INTO users_entity (oauth_provider, oauth_id, oauth_username, oauth_token, oauth_secret) VALUES ('twitter', {$user_info->id}, '{$user_info->screen_name}', '{$access_token['oauth_token']}', '{$access_token['oauth_token_secret']}')");
        $query = mysql_query("SELECT * FROM users_entity WHERE id = ".mysql_insert_id());
        $result = mysql_fetch_array($query);
    } else {
        // Update the tokens
        $query = mysql_query("UPDATE users_entity SET oauth_token = '{$access_token['oauth_token']}', oauth_secret = '{$access_token['oauth_token_secret']}' WHERE oauth_provider = 'twitter' AND oauth_id = {$user_info->id}");

*更新完整代码:

<?
require_once('../Connections/f12_database_connect.php');
?>
<?

$root = realpath($_SERVER["DOCUMENT_ROOT"]);

require("twitteroauth/twitteroauth.php");
session_start();

if(!empty($_GET['oauth_verifier']) && !empty($_SESSION['oauth_token']) && !empty($_SESSION['oauth_token_secret'])){

// We've got everything we need
// TwitterOAuth instance, with two new parameters we got in twitter_login.php
$twitteroauth = new TwitterOAuth('Tt7HVYyZJC25GWMybpemg', '11nazzxqFrJEqVCxpdLfMBxq4fsh1iPsaaEIma5sI', $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
// Let's request the access token
$access_token = $twitteroauth->getAccessToken($_GET['oauth_verifier']);
// Save it in a session var
$_SESSION['access_token'] = $access_token;
// Let's get the user's info
$user_info = $twitteroauth->get('account/verify_credentials');
/*// Print user's info
print_r($user_info);*/

//Check and update database
if(isset($user_info->error)){
    // Something's wrong, go back to square 1
    header('Location: /twitter/twitter_login.php');
} else {
    // Let's find the user by its ID
    $query = mysql_query("SELECT * FROM users_entity WHERE oauth_provider = 'twitter' AND oauth_id = ".$user_info->id);
    $result = mysql_fetch_array($query);

    // If not, let's add it to the database
    if(empty($result)){
        $query = mysql_query("INSERT INTO users_entity (oauth_provider, oauth_id, oauth_username, oauth_token, oauth_secret) VALUES ('twitter', {$user_info->id}, '{$user_info->screen_name}', '{$access_token['oauth_token']}', '{$access_token['oauth_token_secret']}')");
        $query = mysql_query("SELECT * FROM users_entity WHERE id = ".mysql_insert_id());
        $result = mysql_fetch_array($query);
    } else {
        // Update the tokens
        $query = mysql_query("UPDATE users_entity SET oauth_token = '{$access_token['oauth_token']}', oauth_secret = '{$access_token['oauth_token_secret']}' WHERE oauth_provider = 'twitter' AND oauth_id = {$user_info->id}");
    }

    $_SESSION['twitter_id'] = $result['user_primary_id'];
    $_SESSION['twitter_username'] = $result['oauth_username'];
    $_SESSION['twitter_oauth_uid'] = $result['oauth_id'];
    $_SESSION['twitter_oauth_provider'] = $result['oauth_provider'];
    $_SESSION['twitter_oauth_token'] = $result['oauth_token'];
    $_SESSION['twitter_oauth_secret'] = $result['oauth_secret'];

    if(!empty($_SESSION['twitter_username'])){
    // User is logged in, redirect
    header('Location: /catalog/edition/standard/authenticate/login_success_twitter.php');
    }

}


} else {
    // Something's missing, go back to square 1
    header('Location: /twitter/twitter_login.php');
}

?>

最佳答案

这意味着您的查询失败。我敢打赌,如果您检查 $query 的值,您会看到它显示 false,这是 mysql_query() 返回的内容发生错误。

此外,您的代码对 SQL 注入(inject)攻击是完全开放的。您应该转义数据,至少使用 mysql_real_escape_string(),但我强烈建议采用 PDO 的参数化方法,以完全避免该问题。

关于php - MySQL 获取数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378548/

相关文章:

php - 不允许 Laravel 作业序列化 'Closure'

php - laravel - sortBy() 无法正常工作

php - docker debian 拉伸(stretch)镜像中缺少 php-redis 存储库

php - php 中的 html 出现乱码

mysql - 在线 (My)SQL 工具可以转义字符串以便在查询中使用?

mysql - sql选择前10条记录

php - 尝试学习 MySQL 和 PHP

php - Javascript、PHP json不会解析?

Mysql从存储过程插入给出错误1064

php - 如何处理/优化数千个不同的执行 SELECT 查询?