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をよりよく理解するために、このチュートリアルを参照することをお勧めします彼はあなたに物事を非常にはっきりと案内します。

このツタンカーメンを見た後で書き直してみてください。それでも問題が解決しない場合は、戻ってきてください。

于 2012-08-21T17:27:18.213 に答える