繁体   English   中英

我的MySQL数据库中没有插入一个值?

[英]Only one value is not inserting into my MYSQL db?

我是这个领域的新手。 我正在尝试实现Google OAuth来提取数据,但不幸的是,我无法将用户名值插入我的MySQL数据库。 其他语句可以正常工作并且可以正确插入,但是应该插入用户名的语句无法正常工作。 我花了将近4个小时来尝试修复它。 我不知道该怎么办。

index.php

    <?php ini_set('display_errors', 1);
    error_reporting(E_ALL ^ E_NOTICE); ?>


    <?php 

    include_once("config.php");
    include_once("includes/functions.php");

    //print_r($_GET);die;

    if(isset($_REQUEST['code'])){
      $gClient->authenticate();
      $_SESSION['token'] = $gClient->getAccessToken();
      header('Location: ' . filter_var($redirect_url, FILTER_SANITIZE_URL));
    }

    if (isset($_SESSION['token'])) {
      $gClient->setAccessToken($_SESSION['token']);
    }



    if ($gClient->getAccessToken()) {
      $userProfile = $google_oauthV2->userinfo->get();
      //DB Insert
      //$gUser->setApprovalPrompt ("auto");

      $gUser = new Users();
      // As of PHP 5.3.0

      $gUser->checkUser('google',$userProfile['id'],$userProfile['given_name'],$userProfile['family_name'],$userProfile['email'],$userProfile['gender'],$userProfile['locale'],$userProfile['link'],$userProfile['picture'],$username);
      $_SESSION['google_data'] = $userProfile; // Storing Google User Data in Session
      header("location: feed.php");

      $_SESSION['token'] = $gClient->getAccessToken();
    } else {
      $authUrl = $gClient->createAuthUrl();
    }

      $email  = $_SESSION['google_data']['email'];
      $user = strstr($email, '@', true);
      $username = $user; 
?>

functions.php

<?php ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE); ?>

<?php
 session_start();
class Users {
    public $tableName = 'users';

 function __construct(){
        //database configuration
        $dbServer = 'localhost'; //Define database server host
        $dbUsername = 'root'; //Define database username
        $dbPassword = ''; //Define database password
        $dbName = 'livelor'; //Define database name

        //connect databse
        $con = mysqli_connect($dbServer,$dbUsername,$dbPassword,$dbName);
        if(mysqli_connect_errno()){
            die("Failed to connect with MySQL: ".mysqli_connect_error());
        }else{
            $this->connect = $con;
        }
    }

    function checkUser($oauth_provider,$oauth_uid,$fname,$lname,$email,$gender,$locale,$link,$picture,$username){
        $prevQuery = mysqli_query($this->connect,"SELECT * FROM $this->tableName WHERE oauth_provider = '".$oauth_provider."' AND oauth_uid = '".$oauth_uid."'") or die(mysqli_error($this->connect));
        if(mysqli_num_rows($prevQuery) > 0){
            $update = mysqli_query($this->connect,"UPDATE $this->tableName SET oauth_provider = '".$oauth_provider."', oauth_uid = '".$oauth_uid."' ,fname = '".$fname."', lname = '".$lname."', email = '".$email."', gender = '".$gender."', locale = '".$locale."', picture = '".$picture."', gpluslink = '".$link."', modified = '".date("Y-m-d H:i:s")."' WHERE oauth_provider = '".$oauth_provider."' AND oauth_uid = '".$oauth_uid."'") or die(mysqli_error($this->connect));
        }else{
            $insert = mysqli_query($this->connect,"INSERT INTO $this->tableName SET oauth_provider = '".$oauth_provider."', oauth_uid = '".$oauth_uid."', fname = '".$fname."', lname = '".$lname."', email = '".$email."', gender = '".$gender."', locale = '".$locale."', picture = '".$picture."', gpluslink = '".$link."', created = '".date("Y-m-d H:i:s")."', modified = '".date("Y-m-d H:i:s")."' ,  username='".$username."' ") or die(mysqli_error($this->connect));
        }

        $query = mysqli_query($this->connect,"SELECT * FROM $this->tableName WHERE oauth_provider = '".$oauth_provider."' AND oauth_uid = '".$oauth_uid."'") or die(mysqli_error($this->connect));
        $result = mysqli_fetch_array($query);
        return $result;

    }
}

您的代码中有两个主要问题。 首先,您使用无效的SQL语法。 它是INSERT INTO table(column) VALUES(value) ,而不是SET 据我所知,您的$username尚未定义。 您正在尝试插入$username ,它会传递给函数:

function checkUser($oauth_provider,$oauth_uid,$fname,$lname,$email,$gender,$locale,$link,$picture,$username){
// other code
$insert = mysqli_query($this->connect,"INSERT INTO $this->tableName ( oauth_provider, oauth_uid, fname, lname, email, gender, locale, picture, gpluslink, created, modified,  username) VALUES( '".$oauth_provider."', '".$oauth_uid."', '".$fname."', '".$lname."', '".$email."', '".$gender."', '".$locale."', '".$picture."', '".$link."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."' ,  '".$username."')") or die(mysqli_error($this->connect));
// etc
}

跟踪函数调用

$gUser->checkUser('google',$userProfile['id'],$userProfile['given_name'],$userProfile['family_name'],$userProfile['email'],$userProfile['gender'],$userProfile['locale'],$userProfile['link'],$userProfile['picture'],$username);

将空的$username变量作为参数传递给函数并不能定义它

而且我只是看不到$username在此之前的任何地方定义。

我希望这听起来不是很讽刺,但是为了正确设置$username您必须在函数调用之前定义$username或将设置字符串传递给函数。

$username = 'banana';
$gUser->checkUser('google',$userProfile['id'],$userProfile['given_name'],$userProfile['family_name'],$userProfile['email'],$userProfile['gender'],$userProfile['locale'],$userProfile['link'],$userProfile['picture'],$username);

要么

$gUser->checkUser('google',$userProfile['id'],$userProfile['given_name'],$userProfile['family_name'],$userProfile['email'],$userProfile['gender'],$userProfile['locale'],$userProfile['link'],$userProfile['picture'],'banana');

更改此行:-

$gUser->checkUser('google',$userProfile['id'],$userProfile['given_name'],$userProfile['family_name'],$userProfile['email'],$userProfile['gender'],$userProfile['locale'],$userProfile['link'],$userProfile['picture'],$username);

为此:

$gUser->checkUser('google',$userProfile['id'],$userProfile['given_name'],$userProfile['family_name'],$userProfile['email'],$userProfile['gender'],$userProfile['locale'],$userProfile['link'],$userProfile['picture'],strstr($userProfile['email'], '@', true));

您的插入sql错误-检查正确的语法:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

事实证明,对于INSERT INTO,有SET替代语法。 谁知道。

好的,问题出在这里:

--This will return false, $username is not set
echo isset($username);

$gUser->checkUser('google',$userProfile['id'],$userProfile['given_name'],
$userProfile['family_name'],$userProfile['email'],$userProfile['gender'],
$userProfile['locale'],$userProfile['link'],$userProfile['picture'],$username);
$_SESSION['google_data'] = $userProfile; // Storing Google User Data in Session
header("location: feed.php");

$_SESSION['token'] = $gClient->getAccessToken();
} else {
$authUrl = $gClient->createAuthUrl();
}

$email  = $_SESSION['google_data']['email'];
$user = strstr($email, '@', true);
$username = $user; 

在分配变量之前,您尝试使用$ username变量。 您需要做的是:

$email  = $_SESSION['google_data']['email'];
$user = strstr($email, '@', true);
$username = $user; 

--This will return true, $username is set
echo isset($username);

$gUser->checkUser('google',$userProfile['id'],$userProfile['given_name'],
$userProfile['family_name'],$userProfile['email'],$userProfile['gender'],
$userProfile['locale'],$userProfile['link'],$userProfile['picture'],$username);
$_SESSION['google_data'] = $userProfile; // Storing Google User Data in Session
header("location: feed.php");

$_SESSION['token'] = $gClient->getAccessToken();
} else {
$authUrl = $gClient->createAuthUrl();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM