2016-05-22 4 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 insert query not working

Теперь, если я изменю строку значений следующим образом, она будет работать и отображать новую запись.

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

Что я делаю неправильно? Мне нужно, чтобы имя, фамилия и возраст не были конкретными, так как я получаю их от POST на моем устройстве Android. Вся цель этого скрипта - создать пользователя и его записи, если он еще не существует.

+0

Вы прочитали инструкцию? http://php.net/pdo.prepared-statements - Если это так, вы отклонили его от него, а также должны знать, что означают строковые литералы в MySQL. Ваши массивы POST также выключены, но вы никоим образом не проверяете ошибки. –

ответ

2

У вас есть различные ошибки.

1) Вы не обязательны для своих параметров. Чтобы связать их правильно, вы помещаете :variablename в позицию, в которую вы хотите включить эту переменную. Обычно «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, размещенной в комментарии выше, я изменил ее, чтобы нормально работать, спасибо.