2016-05-22 116 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之后,我修改了它以正常工作,谢谢。