修改后的PHP PDO登录脚本仍然不可用';行不通
我在这里学习php和OOP编程。为了防止sql注入,我正在尝试修改以下工作代码。其他人向我展示了如何使用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';
$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