Php 登录系统,将mysqli转换为pdo错误
我正在尝试将一些MySQLi代码转换为Unity项目的PDO。我正在制作一个登录系统,我已经将一些MYSQLi更改为PDO,但是我在第33行遇到了一个错误: 致命错误:调用未定义的方法PDOStatement::fetch_assoc() 我试图找到PDO版本的Php 登录系统,将mysqli转换为pdo错误,php,mysql,mysqli,pdo,Php,Mysql,Mysqli,Pdo,我正在尝试将一些MySQLi代码转换为Unity项目的PDO。我正在制作一个登录系统,我已经将一些MYSQLi更改为PDO,但是我在第33行遇到了一个错误: 致命错误:调用未定义的方法PDOStatement::fetch_assoc() 我试图找到PDO版本的fetch_assoc,结果发现: fetch(PDO::FETCH_ASSOC); 所以我把线路改成了 while($row = $result->fetch(PDO::FETCH_ASSOC)) { 现在是我的Unity D
fetch_assoc
,结果发现:
fetch(PDO::FETCH_ASSOC);
所以我把线路改成了
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
现在是我的Unity DBcontroller,它有一个“Debug.Log(www.downloadHandler.text)”没有返回任何内容,登录消息也没有出现…向导们,请告诉我下一步要去哪里好吗?我想我应该说,当我使用MySQLi时,脚本工作正常,但我需要将其转换为此项目的PDO。下面是代码:
<?php
$servername = "***";
$username = "***";
$password = "***";
$dbname = "***";
//variables submitted by user
$loginUser = $_POST["loginUser"];
$loginPass = $_POST["loginPass"];
// Create Connection
$conn = new PDO("mysql:host=***;dbname=***",
"***",
"***",
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
//Check Connection
if(!$conn){
die("Connection failed.");
}
$sql = "SELECT password FROM users WHERE username = '" . $loginUser . "'";
$result = $conn->query($sql);
if ($result->fetchAll() > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
if($row["password"] == $loginPass){
echo "Login Success. Welcome ", $loginUser, "!";
}
else{
echo "Wrong Credentials.";
}
}
} else {
echo "Username does not exist.";
}
$conn = null;
?>
调用时,您将从查询中获取所有结果行,因此调用时没有剩余数据。由于您只希望返回一行,因此可以只调用一次fetch
:
if ($row = $result->fetch(PDO::FETCH_ASSOC)) {
if($row["password"] == $loginPass){
echo "Login Success. Welcome ", $loginUser, "!";
}
else{
echo "Wrong Credentials.";
}
}
else {
echo "Username does not exist.";
}
注意事项:
$sql = "SELECT password FROM users WHERE username = :username";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username', $loginUser);
$stmt->execute();
if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if(password_verify($loginPass, $row["password"])) {
echo "Login Success. Welcome ", $loginUser, "!";
}
else{
echo "Wrong Credentials.";
}
}
else {
echo "Wrong Credentials.";
}
刚刚测试了您所做的更改,现在它又开始工作了!非常感谢。我感谢您对SQL注入的提醒,并将研究使用准备好的语句。谢谢!-刚刚看到编辑,我现在也做了这些更改:)@Dizlen查看我的编辑-我添加了一些代码来使用预处理语句警告:您对参数化预处理语句非常开放,应该使用参数化预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。切勿以明文或使用MD5/SHA1存储密码!仅存储使用PHP创建的密码哈希,然后可以使用进行验证。看看这篇文章:了解更多关于@YourCommonSense的信息,为什么你认为这是一个重复的问题?因为OP试图使用来自不同API的函数,这在重复的文章中被清楚地解释为不可能。更不用说这个问题是一个边缘话题