PHP PDO登录脚本不工作


PHP PDO Login script not working

这里又是一个新手。。我试图修复以下代码,以防止sql注入,并学习php和sql的新编写方法。

非常感谢您的建议。

我修改了这个

<?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;
        }
    }
}
?>

对此,我没有得到相同的结果。。

<?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) {
        $sql = $db->prepare("SELECT * FROM users WHERE id=:id AND pswd=:password");
        $result = $db->query($sql);
        $no_of_rows = mysql_num_rows($result);
        if ($no_of_rows > 0) {
            $result = mysql_fetch_array($result);
            return $result;    
        } else {
            return false;
        }
    }
}
?>

您不能将mysql与mysqli或PDO混合使用。你需要查看你的错误日志,因为这是不可能的——你应该看到大量的致命错误。

public function getUser($uid, $password) {
    $stmt = $db->prepare("SELECT * FROM users WHERE id=? AND pswd=?");
    $stmt->execute(array($uid, $password));
    return $stmt->fetch();
}

下面是一些关于如何使用PDO和准备好的语句的示例代码:

$dbh = new PDO('mysql:host=hostname_or_ip;dbname=name_of_database', 'username', 'password');
$stmt = $dbh->prepare("SELECT * FROM users WHERE id = :id AND pswd = :password");
$stmt->bindValue('id', $id);
$stmt->bindValue('password', $password);
if ($stmt->execute()) {
    if ($user = $stmt->fetchObject()) {
       // here you go 
    }
}

你所做的事情有很多问题,包括Xeoncross所说的。

我建议你看一下这个教程,以便更好地掌握PDO。他带你很清楚地了解事情。

看了这个教程后,试着重写一下,如果你仍然有问题,就回来吧。