社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

登录系统,将mysqli转换为pdo错误

Dizlen • 4 年前 • 805 次点击  

我正试图将一些MySQLi代码转换为Unity项目的PDO。我正在创建一个登录系统,我已经将MYSQLi的一些内容更改为PDO,但是在第33行出现了一个错误:

致命错误:调用未定义的方法PDOStatement::fetch_assoc()

我试图找到PDO版本的 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;

?>
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49444
 
805 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Nick
Reply   •   1 楼
Nick    4 年前

当你打电话 fetchAll 您从查询中获取所有结果行,因此在调用 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.";
}

笔记:

  1. 您对SQL注入非常开放,应该使用准备好的语句
  2. 您不应该用纯文本存储密码,而应该使用PHP password_hash password_verify 存储和验证
  3. 区分不正确的密码和无效的用户名通常被认为是不好的做法。对两者使用相同的错误消息。

您应该使用类似于以下代码的内容来避免这些问题:

$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.";
}