2015-12-22 23 views
-1

我有這個登錄頁面,我在看Udemy的教程時寫它。他的代碼工作正常,但在我的代碼(下同),我有以下錯誤:與準備()函數的錯誤

Fatal error: Call to a member function prepare() on a non-object

這是代碼:

<?php 
    //$var = 'This is our first web app page'; 
    //echo $var; 

    //Connection Variables: 
    $dbhost = "localhost"; 
    $dbname = "graphic_db"; 
    $dbuser = "root"; 
    $dbpass = "root"; 

    //Connection to SQL: 
    $conn = new PDO("mysql:host=$dbhost; dbname=$dbname", $dbuser, $dbpass); 
    //Error messagin enabled: 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    //Adding a character set: 
    $conn = exec("SET CHARACTER SET utf8mb4"); 

    $user = ''; 
    $pass = ''; 
    $sum = 0; 
    $error_msg = "Please type a username and a password"; 
    if(isset($_POST['login_submit'])) 
    { 
     //Start a session: 
     session_start(); 
     $user = $_POST['username']; 
     $pass = $_POST['password']; 
     if(empty($user) && empty($pass)) 
     { 
      echo $error_msg; 
      $pass = ''; 
     } 
     if(empty($user) || empty($pass)) 
     { 
      echo $error_msg; 
      $user = ''; 
      $pass = ''; 
     } 
     if(!empty($user) && !empty($pass)) 
     { 
      //SQL: 
      $query = $conn->prepare("SELECT * FROM login WHERE user = :u AND password= :p LIMIT 1"); 
      $query->bindParam(":u", $user); 
      $query->bindParam(":p", $pass); 
      //Execute query: 
      $query->execute(); 
      $number_rows = $query->fetch(PDO::FETCH_NUM); 
      if($number_rows>0) 
      { 
       echo $user; 
       $_SESSION = $user; 
       $_SESSION = $pass; 
       header("Location: /pages/home.php"); 
      } 
      else 
      { 
       echo "Invalid username or password"; 
       header("Location: index.php"); 
      } 
      //echo $user; 
     } 
    } 
    if(!isset($_POST['login_submit'])) 
    { 
     echo "Login button not clicked"; 
    } 
?> 
+0

'$ conn = exec(「SET CHARACTER SET utf8mb4」);' - 這是做什麼和'function exec()'返回什麼? – VolkerK

+0

$ conn = exec(「SET CHARACTER SET utf8mb4」);是在MySQL內部添加阿拉伯文字。和exec()我不知道如何看看什麼是回報 – am90

回答

6

你這種說法破壞$康恩對象:

$conn->exec("SET CHARACTER SET utf8mb4"); 

$conn = exec("SET CHARACTER SET utf8mb4"); 

通過將其更換

注意,從PHP 5.3.6起,您可以設置的字符在連接字符串中設置,如下所示:

$conn = new PDO("mysql:host=$dbhost; dbname=$dbname; charset=utf8", $dbuser, $dbpass); 

單獨exec通話就不再必要。