Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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脚本包含facebook数据,但不会将其插入mysql数据库_Php_Mysql_Facebook_Insert - Fatal编程技术网

php脚本包含facebook数据,但不会将其插入mysql数据库

php脚本包含facebook数据,但不会将其插入mysql数据库,php,mysql,facebook,insert,Php,Mysql,Facebook,Insert,我已经为此工作了约2天,在检查代码和错误日志数小时后,找不到解决方案。所以,我希望一些新鲜的眼睛会有所帮助 我正在收集facebook数据并将其插入我的数据库。当我在$SQLINSERT命令上运行var_转储时,我看到字符串中的所有facebook数据。我还对每个变量运行了var_转储,以确保数据在那里。它是,每个显示为字符串类型。这与数据库所期望的VARCHAR相匹配,并且有足够的空间 我在这个数据库中还有一些其他的表,它们仍然在接受数据,所以这似乎不是一个数据库问题。这是一个共享服务器,我没

我已经为此工作了约2天,在检查代码和错误日志数小时后,找不到解决方案。所以,我希望一些新鲜的眼睛会有所帮助

我正在收集facebook数据并将其插入我的数据库。当我在$SQLINSERT命令上运行var_转储时,我看到字符串中的所有facebook数据。我还对每个变量运行了var_转储,以确保数据在那里。它是,每个显示为字符串类型。这与数据库所期望的VARCHAR相匹配,并且有足够的空间

我在这个数据库中还有一些其他的表,它们仍然在接受数据,所以这似乎不是一个数据库问题。这是一个共享服务器,我没有访问它的权限。此外,我在INSERT语句中尝试了几乎所有的语法变体、不同的引号等,但都无济于事

最后,mysql_错误导致的错误是,您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,了解可使用的正确语法,例如“我只是一个想找点乐趣的冷小子……”1号线AAAIAZB21He9sBAOLpbm3XTwabMVX0s’。您在单引号中看到的是INSERT语句中$fbabout和$at值的当前数据

下面是php文件的代码。提前感谢您抽出时间查看此内容

<?php 
require_once("facebook.php");

$app_id = "";
$app_secret = "";
$my_url = "";



$code = $_POST["code"];

if(empty($code)) {
        $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
        . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
        . $_SESSION['state']."&scope=email,user_birthday,user_interests,friends_interests,publish_stream,user_about_me,user_checkins";

        echo("<script> top.location.href='" . $dialog_url . "'</script>");



} else {
    $host=""; // Host name 
    $username=""; // Mysql username 
    $password=""; // Mysql password 
    $db_name=""; // Database name 
    $tbl_name=""; // Table name  

    // Connect to server and select database.
    mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$db_name")or die("cannot select DB");  

        $token_url = "https://graph.facebook.com/oauth/access_token?"
        . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
        . "&client_secret=" . $app_secret . "&code=" . $code;

        $response = file_get_contents($token_url);
        $params = null;
        parse_str($response, $params);

        $_SESSION['access_token'] = $params['access_token'];

        $graph_url = "https://graph.facebook.com/me?access_token=". $params['access_token'];
    $interests = "https://graph.facebook.com/me/interests?access_token=". $params['access_token'];

    $user = json_decode(file_get_contents($graph_url));
    $user_interests = json_decode(file_get_contents($interests));

    $id = $user->id;        
    $fname = $user->first_name;
    $lname = $user->last_name;
    $link = $user->link;
    $gender = $user->gender;
    $locale = $user->location->name;
    $email = $user->email;
    $bday = $user->birthday;

    $uidata = array();
    $number = count($user_interests->data);
            for ($i = 0;$i<=$number-1;$i++){
           array_push($uidata,($user_interests->data[$i]->name));
    }
    $ui = implode(",", $uidata);

    $fbabout = $user->bio;
    $at = $params['access_token'];

    // Insert data into mysql 
    $sql="INSERT INTO $tbl_name(fbid,fname,lname,link,gender,locale,email,birthday,interests,fbabout,fbtoken)VALUES('".$id."','".$fname."','".$lname."','".$link."','".$gender."','".$locale."','".$email."','".$bday."','".$ui."','".$fbabout."','".$at."')";
    $result=mysql_query($sql);


    if($result) {
        header( 'Location: https://crushonit.com/join/fbRegister.html' );
    } else {
        echo mysql_error();
    }

} 
?>

<?php 
// close connection 
mysql_close();
?>

正如其他人所评论的,在将数据插入数据库之前,您应该始终清理所有数据,至少使用mysql\u real\u escape\u字符串。在你的情况下,我给你带来了麻烦

不过,我还有另一个疑问;您正在使用PHPSDK,包括facebook.PHP,但您也在使用文件\u get\u内容手动查询图形。这让我觉得很奇怪,因为如果你正在使用SDK,你不需要这么做。SDK将创建一个对象,您可以查询该对象


上面的链接可能会有所帮助。

$table\u name浏览器将此读取为变量从table\u name中删除此$。。。它将撇号视为数据的结束引号。在将要插入数据库的所有变量上使用mysql\u real\u escape\u string$data。它既可以防止SQL注入黑客攻击,也可以防止此类合法问题。要了解发生了什么,请尝试用print替换mysql_查询,并阅读它提供的内容。如果您觉得有点冒险,请尝试用php/PDO重写代码。当你摸索这些概念时,它会给你的项目增加几天额外的时间,但回报是巨大的:改进的安全注入是不可能的,存储过程功能的易用性,以及编码的一致性。我知道10年前mysql才是真正的逃逸字符串@都德解决方案,正如我在下面提到的,我对这个很陌生,所以我很乐意从一开始就学习一些更好的东西。这一切都需要我一点时间,所以我相信从长远来看,学习PDO会更好地利用时间。谢谢@我绝对喜欢。如果PHP的创建者使用它并推荐它,我也会这样做!另一个好处是:可以使用许多不同的SQL引擎。因此,如果您从MYSQL切换到POSTGRES,几乎不需要重写任何查询(如果有的话)。最后,另一个广泛使用PDO并将其作为个人旁白的好例子——这对我来说是一个改变生活的教训:感谢大家快速、正确的反馈。你真棒!正如你可能从我的代码中看到的,我对这个很陌生。考虑到这一点,我没有在这篇文章中使用mysql\u real\u escape,因为所有数据都是从facebook api中提取的,在我看来,发生注入攻击的可能性很低,不可能吗?鉴于此。但正如我所说,我是新手,所以我显然不了解mysql\u real\u escape的所有用途。我会仔细阅读的。再次感谢大家!感谢您指出php sdk和我的手动调用之间的不匹配。我曾经使用PHPSDK编写了很多代码,试图让它正常工作。所以这只是一个剩余的。再次感谢!老实说,在我看来,你最好使用facebook sdk。但是$tbl_name是一个变量。看看else子句的开头。它是一个php变量。