[英]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.