問題描述
我有一個登錄屏幕,用戶可以在其中輸入用戶名和密碼.我設法使用 PDO 連接到數據庫,但我必須將其更改為 mysqli.有人能幫我把它轉換成mysqli嗎?提前致謝.
I have a login screen in which the user inputs their username and password. I managed to connect to the database using PDO but I have to change it to mysqli. Could someone please help me convert it to mysqli. Thanks in advance.
PDO:
<?php
try {
$database = new PDO('mysql:host=localhost;dbname=myfiles', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$query = "SELECT * FROM users WHERE Username = ? AND Password = ?";
$userParam = array($_POST["Uname"], $_POST["Pass"]);
$st = $database->prepare($query);
$st->execute($userParam);
$getResults = $st->fetch(PDO::FETCH_ASSOC);
session_start();
$_SESSION['details']['username'] = $getResults['Username'];
$_SESSION['details']['password'] = $getResults['Password'];
unset($database);
header("Location: index.php");
}
catch(PDOException $e)
{
print "Error!: " . $e->getMessage() . "<br/>";
exit();
}
?>
Mysqli(這是我嘗試過的)
Mysqli (This is what I have tried)
<?php
try {
$database = mysqli_connect("localhost", "root", "", "myfiles");
$query = mysqli_query("SELECT * FROM users WHERE Username = ? AND Password = ?");
$userParam = array($_POST["Uname"], $_POST["Pass"]);
$st = $database->prepare($query);
$st->execute($userParam);
$getResults = mysqli_fetch_assoc($query);
session_start();
$_SESSION['details']['username'] = $results['Username'];
$_SESSION['details']['password'] = $results['Password'];
unset($database);
header("Location: index.php");
} catch (Exception $e ) {
print "Error!: " . $e->getMessage() . "<br/>";
exit();
}
?>
運行Mysqli代碼時出錯:
Error when running Mysqli code:
Warning: mysqli_query() expects at least 2 parameters, 1 given in G:xampphtdocsolddroplogin.php on line 39
Fatal error: Call to a member function execute() on a non-object in G:xampphtdocsolddroplogin.php on line 43
更新:
Mysqli
<?php
try {
$database = mysqli_connect("localhost", "root", "", "myfiles");
$query = "SELECT * FROM users WHERE Username = ? AND Password = ?";
$userParam = array($_POST["Uname"], $_POST["Pass"]);
$st = $database->prepare($query);
$st->execute($userParam);
$getResults = mysqli_fetch_assoc($st);
session_start();
$_SESSION['details']['username'] = $getResults['Username'];
$_SESSION['details']['password'] = $getResults['Password'];
unset($database);
header("Location: index.php");
} catch (Exception $e ) {
print "Error!: " . $e->getMessage() . "<br/>";
exit();
}
?>
"Waiting for localhost"
推薦答案
你的問題在這里:
$query = mysqli_query("SELECT * FROM users WHERE Username = ? AND Password = ?");
$userParam = array($_POST["Uname"], $_POST["Pass"]);
$st = $database->prepare($query);
$st->execute($userParam);
prepare
需要一個字符串,mysqli_query
是一個執行查詢的過程函數.去掉那個.此外,使用 mysqli,您需要先綁定參數,而不是將它們傳遞給 execute()
.
prepare
expects a string, mysqli_query
is a procedural function which executes the query. Remove that. Additionally, with mysqli you need to bind the parameters first, not pass them to execute()
.
$query = "SELECT * FROM users WHERE Username = ? AND Password = ?";
$st = $database->prepare($query);
$st->bindParam("ss",$_POST["Uname"], $_POST["Pass"]);
$st->execute();
以下是手冊的相關部分:
Here's the relevant sections of the manual:
http://php.net/manual/en/mysqli.prepare.php
http://php.net/manual/en/mysqli-stmt.bind-param.php
http://php.net/manual/en/mysqli-stmt.執行.php
這篇關于如何將 PDO 轉換為 mysqli?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!