修改后的PHP PDO登录脚本仍然不可用';行不通

修改后的PHP PDO登录脚本仍然不可用';行不通,php,sql,pdo,prepared-statement,Php,Sql,Pdo,Prepared Statement,我在这里学习php和OOP编程。为了防止sql注入,我正在尝试修改以下工作代码。其他人向我展示了如何使用PDO的想法。但我很难让它工作 基本上,此函数用于传递$uid和$password以检查用户。 我做错了什么 user_function.php <?php class DB_Functions { private $db; function __construct() { require_once 'db_connect.php';

我在这里学习php和OOP编程。为了防止sql注入,我正在尝试修改以下工作代码。其他人向我展示了如何使用PDO的想法。但我很难让它工作

基本上,此函数用于传递
$uid
$password
以检查用户。 我做错了什么

user_function.php

<?php

class DB_Functions {

    private $db;

    function __construct() {

        require_once 'db_connect.php';

        $this->db = new DB_Connect();
        $this->db->connect();
    }

    public function getUser($uid, $password) {
        $result = mysql_query("SELECT * FROM users WHERE id = '$uid' AND pswd = '$password'") or die(mysql_error());

        $no_of_rows = mysql_num_rows($result);
        if ($no_of_rows > 0) {

            $result = mysql_fetch_array($result);
            return $result;    

        } else {

            return false;
        }
    }

}

?>

你完全没有抓住PDO的重点。通过使用占位符SE正确准备查询,您不必自己进行任何转义

同样,mysql\u real\u escape\u string()取决于是否存在使用
mysql\u connect()
建立的活动数据库连接。否则,您的m_r_e_s()将无法工作,并将返回布尔值false表示“失败”。然后尝试在查询中使用这些假值


PDO建立的数据库连接不可与mysql_()和mysqli_()等共享。。。每个库都有自己的独立连接池。

您使用的是PDO,因此不能使用
mysql\u real\u escape\u string()。您不需要转义这些参数,因为PDO将在准备好的查询中为您自动转义它们

因此,只需像这样调用
getUser()

if ($tag == 'login') {

    // check for user
    $user = $db->getUser( $_POST['id'], $_POST['pswd']);

    ... etc

你在用PDO。你为什么还要尝试使用mysql_*函数呢?这不属于你的问题,但绝不会以明文、md5或sha1散列方式保存密码。为了提供公平的密码安全性,请使用bcrypt算法或具有类似强度的算法。请参考你最喜欢的搜索引擎进行一些研究。关键词:bcrypt,随机盐,.可能重复的
require_once 'include/db_functions.php';
$db = new DB_Functions();


if ($tag == 'login') {

    $uid =mysql_real_escape_string($_POST['id']);
    $password =mysql_real_escape_string($_POST['pswd']);

    // check for user
    $user = $db->getUser($uid, $password);

    if ($user != false) {

        $response["success"] = 1;
        $response["user"]["id"] = $user["id"];

        echo json_encode($response);
    } else {

        $response["error"] = 1;
        $response["error_msg"] = "Incorrect email or password!";
        echo json_encode($response);
    }
if ($tag == 'login') {

    // check for user
    $user = $db->getUser( $_POST['id'], $_POST['pswd']);

    ... etc