来自一些Facebook用户的数据没有插入到mysql数据库
问题描述:
我有一个奇怪的,但肯定是严重的问题,从一些Facebook用户获取授权我的应用程序和使用它(通常顺便说一句)的数据。来自一些Facebook用户的数据没有插入到mysql数据库
到目前为止,大约有3000个用户使用了该应用程序,但用户表中只显示了600个用户。这怎么可能?我无法找到旧用户和新用户之间的联系 - 对于某些用户来说,它完美无缺,对于其他用户来说,它根本不起作用。
下面是完整的,但出于安全考虑审查代码:
<?php
require 'facebook.php';
include 'config.php';
session_start();
$app_id = 'id';
$app_secret = 'secret';
$app_namespace = 'namespace';
$app_url = 'https://apps.facebook.com/' . $app_namespace . '/';
$scope = 'email,publish_actions';
//初始化了Facebook SDK
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
//获取当前用户
$user = $facebook->getUser();
//如果用户未安装该应用程序,则将其重定向至“身份验证对话框”
if (!$user) {
$loginUrl = $facebook->getLoginUrl(array(
'scope' => $scope,
'redirect_uri' => $app_url,
));
print('<script> top.location.href=\'' . $loginUrl . '\'</script>');
}
else if ($user) {
try {
//继续知道我们有一个经过身份验证的登录用户。
$fbuid = $facebook->getUser();
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
else{
header('Location: index.php');
}
$queryUserExists = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook'AND oauth_uid = " . $user_profile['id']);
$num=mysql_numrows($queryUserExists);
//如果不是,它添加到数据库
if ($num == 0) {
$query = mysql_query("INSERT INTO users (oauth_uid, oauth_provider, username, first_name, last_name, email, pic_square ,login_date , dailytokens)
VALUES ({$user_profile['id']}, 'facebook', '{$user_profile['name']}', '{$user_profile['first_name']}','{$user_profile['last_name']}','{$user_profile['email']}', '".$photolink."',CURDATE(),1)");
$query = mysql_query("SELECT * FROM users WHERE oauth_uid = " . mysql_insert_id());
$result = mysql_fetch_array($query);
}
else
{
$DateLastLogin=mysql_result($queryUserExists,0,"login_date");
$myDate = date('Y-m-d');
$CompLastDate = strtotime($DateLastLogin);
$CompMyDate = strtotime($myDate);
if($CompLastDate < $CompMyDate){
$updateDailyToken = "Update users set login_date=CURDATE(), dailytokens = dailytokens + 1 where oauth_uid =" . $user_profile['id'];
$updateToken= mysql_query($updateDailyToken) or die(mysql_error());
}
}
$query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid = " . $user_profile['id']);
$_SESSION['userid']=$user_profile['id'];
//登录或注销的URL会根据当前用户状态是必要的。
if ($user) {
$paramsout = array('next'=>'http://facebook.com');
$logoutUrl = $facebook->getLogoutUrl($paramsout);
}
?>
答
问题是与数据库中的对象类型。例如,某些Facebook用户的ID较大,例如:0098788563000236,因此使用BIGINT而不是INT解决此问题。
答
这里是你的问题
$query = mysql_query("INSERT INTO users (oauth_uid, oauth_provider, username, first_name, last_name, email, pic_square ,login_date , dailytokens)
VALUES ({$user_profile['id']}, 'facebook', '{$user_profile['name']}', '{$user_profile['first_name']}','{$user_profile['last_name']}','{$user_profile['email']}', '".$photolink."',CURDATE(),1)");
应该
哇,太快了!但我担心它不起作用。准确地说,它和以前一样。我已经删除了所有用户,并尝试用我的配偶几个帐户登录(他们拥有所有授权的应用);其中一些在用户表中,但其他的则不在。 – gazdac
更新(如果有帮助):我甚至从这些FB账户中删除了权限,并且还没有授权的应用程序 - 仍然没有... – gazdac
我已经完成了投票,所以现在您已获得聊天权限,请在[聊天] (http://chat.stackoverflow.com/) –