2016-05-22 160 views
-3
<?php 
// DATABASE-HOSTNAME-OR-IPADDRESS-GOES-HERE 
// MYSQL-DBNAME-GOES-HERE 
class LoginHandler { 
    public $dbHostname = 'localhost'; 
    public $dbDatabaseName = 'employee101'; 
    public $user = 'root'; 
    public $password = 'root'; 
    public function handleRequest($arg) { 
     $username = '123'; 
     $password2 = '123'; 
     $fname = 'John'; 
     $lname = 'Doe'; 
     $age = '18'; 
     if (! $username) { 
      $this->fail(); 
      return; 
     } 
     try { 
      $dsn = "mysql:dbname={$this->dbDatabaseName};host={$this->dbHostname};port=8888"; 
      $pdo = new PDO($dsn, $this->user, $this->password); 
      $sql="SELECT * FROM `employee_data` WHERE `username`='$username'"; 
      $stmt = $pdo->query($sql); 
      if ($stmt === false) { 
       echo "DB Critical Error"; 
       return; 
      } 
      elseif ($stmt->rowCount() > 0) { 
       echo "user already exists"; 
       return; 
      } 
      else { 
       echo "User created"; 
       $sql = "INSERT INTO employee_data (name, sumame, age, username, password) 
       VALUES ($fname, $lname, $age, $username, $password2)"; 
       $dsn = "mysql:dbname={$this->dbDatabaseName};host={$this->dbHostname};port=8888"; 

       $pdo = new PDO($dsn, $this->user, $this->password); 
       $stmtz = $pdo->prepare($sql); 

       $stmtz->bindParam($fname, $_POST[$fname], PDO::PARAM_STR); 
       $stmtz->bindParam($lname, $_POST[$lname], PDO::PARAM_STR); 
       $stmtz->bindParam($age, $_POST[$age], PDO::PARAM_STR); 
       $stmtz->bindParam($username, $_POST[$username], PDO::PARAM_STR); 
       $stmtz->bindParam($password2, $_POST[$password2], PDO::PARAM_STR); 

       $resultzzx = $stmtz->execute(); 
       return; 
      } 
     } 
     catch(PDOException $e) { 
      $this->log('Connection failed: ' . $e->getMessage()); 
      echo "DB Critical Error"; 
     } 
    } 
    function log($msg) { 
     file_put_contents("login.log", strftime('%Y-%m-%d %T ') . "$msg\n", FILE_APPEND); 
    } 
} 
$handler = new LoginHandler(); 
$handler->handleRequest($_POST); 
?> 

當試圖使用上面的腳本時,我得到了用戶創建的回顯,但即使刷新表時,新條目也不會顯示。PHP pdo插入查詢不起作用

現在,如果我將值行更改爲以下內容,它將工作並顯示新條目。

('John', 'Doe', '18', $username, $password2)"; 

我在做什麼錯?我需要的名字,姓氏和年齡條目不具體,因爲我將從我的Android設備上的POST獲得它們。這個腳本的全部目的是創建用戶,如果它尚不存在,它就是記錄。

+0

您是否閱讀過手冊? http://php.net/pdo.prepared-statements - 如果是這樣,你偏離了它,並且還需要知道MySQL中的字符串字面意味着什麼。你的POST數組也是關閉的,但是你沒有以任何方式檢查錯誤。 –

回答

2

你有各種錯誤。

1)您沒有正確綁定您的參數。要正確地綁定它們,請將:variablename放置在要包含變量的位置。通常,「變量名稱」應該與您從超全球$_POST中獲得的變量名稱相同,以便代碼更清晰且更具可讀性。

2)您沒有正確地從$_POST超全球範圍內獲取值。你放在裏面的key值是字符串,並且通過放置一個空的$fname變量,你不會得到正確的結果。如果你的代碼是$fname = 'fname'隱藏起來的話,它纔會起作用,但是由於代碼本身沒有必要,所以代碼本身就不會被使用,只會使源代碼變大。

$sql = "INSERT INTO employee_data (name, sumame, age, username, password) 
VALUES (:fname, :lname, :age, :username, :password2)"; 

$dsn = "mysql:dbname={$this->dbDatabaseName};host= 
{$this>dbHostname};port=8888"; 

$pdo = new PDO($dsn, $this->user, $this->password); 

$stmtz = $pdo->prepare($sql); 

$stmtz->bindParam(':fname', $_POST['fname']); 
$stmtz->bindParam(':lname', $_POST['lname']); 
$stmtz->bindParam(':age', $_POST['age']); 
$stmtz->bindParam(':username', $_POST['username']); 
$stmtz->bindParam(':password2', $_POST['password2']); 

我希望有幫助。

1
$sql = "INSERT INTO employee_data (name, sumame, age, username, password) VALUES (:name, :sumame, :age, :username, :password)"; 
       $dsn = "mysql:dbname={$this->dbDatabaseName};host={$this->dbHostname};port=8888"; 

       $pdo = new PDO($dsn, $this->user, $this->password); 
       $stmtz = $pdo->prepare($sql); 
       $stmtz->bindParam(':name', $fname); 
       $stmtz->bindParam(':sumame', $lname); 
       $stmtz->bindParam(':age', $age); 
       $stmtz->bindParam(':username', $username); 
       $stmtz->bindParam(':password', $password2); 
       $resultzzx = $stmtz->execute(); 
       return; 

在審查了上面評論中發佈的鏈接Fred之後,我修改了它以正常工作,謝謝。