簡體   English   中英

PHP PDO在執行帶參數的預備語句時返回false

[英]PHP PDO returning false when executing prepared statement with parameters

在過去三天里,我一直在努力解決這個問題。 似乎無論我做什么,如果我在傳遞參數時嘗試執行准備好的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。 它應該以關聯數組的形式返回查詢結果的第一行。

$sql = "SELECT * FROM `users` WHERE user_email = :user_email";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':user_email', $email);
$stmt->execute();

試試看,看看它能為您帶來什么。 一旦看到錯誤所在,就可以從那里去

<?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";
      }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM