php – 如何在PDO中使用/编写mysql_real_escape_string?

前端之家收集整理的这篇文章主要介绍了php – 如何在PDO中使用/编写mysql_real_escape_string?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

参见英文答案 > real escape string and PDO                                     3个
在我的代码中我试图将MysqL_real_escape_string转换为PDO语句.有人有关于如何在PDO中编写MysqL_real_escape_string的提示吗?

我在两行中使用MysqL_real_escape_string:
$userName = MysqL_real_escape_string($_ POST [‘username’]);
$password = sha1(MysqL_real_escape_string($_ POST [‘password’]));

  1. PHP
  2. ob_start();
  3. session_start();
  4. include("../database/db.PHP");
  5. $userName = MysqL_real_escape_string($_POST['username']);
  6. $password = sha1(MysqL_real_escape_string($_POST['password']));
  7. echo "MysqL_query($query);
  8. // $rows = $res->fetch(PDO::FETCH_ASSOC);
  9. $rows = MysqL_fetch_assoc($res);
  10. echo "MysqL_num_rows($res) . "PHP");
  11. // }
  12. // else
  13. // {
  14. // echo 'Username and password dont match
    PHP?loginerror=yes");
  15. // }
  16. if(MysqL_num_rows($res)>0)
  17. {
  18. $_SESSION['userName'] = $rows['admin_usr_name'];
  19. $_SESSION['admin_id'] = $rows['admin_id'];
  20. header("location: ../pages/content.PHP");
  21. }
  22. else
  23. {
  24. echo 'Username and password dont match
    PHP?loginerror=yes");
  25. }

?>

这就是我试图用PDO做的事情

  1. $host = "localhost";
  2. $user = "root";
  3. $password = "root";
  4. $db = "blog";
  5. $dsn = "MysqL:host=$host;dbname=$db;charset=utf8";
  6. $opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
  7. $pdo = new PDO($dsn,$user,$password,$opt);
  8. $username = $_POST['username'];
  9. $password = $_POST['password'];
  10. $query = "select * from tbladmin where admin_usr_name=:userName and admin_pwd=:passWord";
  11. try
  12. {
  13. $databas = new PDO($dsn,$password);
  14. }
  15. catch (PDOException $e)
  16. {
  17. echo 'Connection Failed: ' . $e->getMessage();
  18. }
  19. $statement = $databas->prepare($query);
  20. $statement->execute(array(':userName'=>$username,':passWord'=> $password));
  21. $row = $statement->fetch();

我总是得到这个错误
在非对象上调用成员函数prepare()

最佳答案
关键是通过使用带参数化查询和绑定值的预准备语句,您不需要诸如MysqL_real_escape_string之类的东西.

查看PDO documentation有关如何使用绑定值和参数化查询/预准备语句的信息.

关键是你要编写一个SQL查询

  1. $query = $pdo->prepare("SELECT * FROM users WHERE username = ? and password = ?");

然后你会传入绑定值代替?符号,因此查询只是按字面意思运行:

  1. $query->bindParam(1,$username);
  2. $query->bindParam(2,$password);

任何类型的sql注入尝试,例如1′; DROP用户 – 在上面的变量中将不再起作用,因为它将按字面意思调用.

猜你在找的MySQL相关文章