0

这里的另一个新手.. 我正在尝试修复以下代码以防止 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;
        }
    }
}
?>
4

3 回答 3

3

您不能将 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();
}
于 2012-08-21T17:22:48.920 回答
0

下面是一些关于如何使用 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 
    }
}
于 2012-08-21T17:27:06.170 回答
0

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

我建议您看一下教程,以便更好地掌握 PDO。他非常清楚地引导你完成事情。

看看这个 tut 后尝试重写,然后如果你仍然有问题回来。

于 2012-08-21T17:27:18.213 回答