这里有另一个新手.. 我正在尝试修复下面的代码以防止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;
}
}
}
?>
答案 0 :(得分: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();
}
答案 1 :(得分: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
}
}
答案 2 :(得分:0)