PHP PDO возвращает false при выполнении подготовленного оператора с параметрами - PullRequest
0 голосов
/ 20 ноября 2018

Я бьюсь головой об этой проблеме последние три дня.Кажется, что бы я ни делал, если я попытаюсь выполнить подготовленный оператор PDO при передаче параметров, он всегда вернет false.

function login($email,$password)

$outcome;
$conn;
$servername = ...
$username = ...
$password = ...
$database = ...

try {
    $conn = new PDO(...);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, FALSE );


} catch(PDOException $e) {
    $outcome = "Connection failed: " . $e->getMessage();
    return $outcome;
    die();
}

$sql = "SELECT * FROM `users` WHERE user_email = ?";
$stmt = $conn->prepare($sql);

$stmt->execute(array($email));

$user = $stmt->fetch(PDO::FETCH_ASSOC);

echo (json_encode($user));

...

Я пытался использовать bindValue () и bindParam () для явного связыванияпеременная $ email для заполнителя, в любом случае переменная $ user всегда будет иметь значение false.Он должен вернуть первую строку результатов запроса в виде ассоциативного массива.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Попробуйте и посмотрите, что это вам дает.Как только вы увидите, где ошибка, вы можете перейти оттуда

<?php
function login($email,$password)
{
      $servername = 'localhost';
      $username = 'DB_USERNAME';
      $password = 'DB_PASSWORD';
      $database = 'DB_NAME';
      $charset = 'utf8mb4';

      $dsn = "mysql:host=$servername;dbname=$database;charset=$charset";
      try
      {
          $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ];
          $conn = new PDO($dsn, $username, $password, $opt);
      }
      catch(PDOException $e)
      {
          echo "Connection failed: " . $e->getMessage();
      }

      $stmt = $conn->prepare('SELECT * FROM users WHERE user_email = :user_email');
      $stmt->bindParam(':user_email', $email);
      if ($stmt->execute())
      {
          if ($user = $stmt->fetch())
          {
              echo (json_encode($user));
          } else {
              echo "Error, failed fetching data";
          }
      } else {
          echo "Error, failed executing query";
      }
 }
0 голосов
/ 20 ноября 2018
$sql = "SELECT * FROM `users` WHERE user_email = :user_email";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':user_email', $email);
$stmt->execute();
...