php - PDO 连接问题

标签 php mysql pdo

<分区>

得到的代码如下:

<?php
require_once("../classes/pdo.class.php");
$db = new mysql();
$db->connect();
class votingpanel{

    public function logintopanel($username, $password){

        //Dane z logowania + token
        $login = mysql_real_escape_string($username); 
        $password = mysql_real_escape_string($password); 

            $sql = $db->prepare("SELECT * FROM xxx WHERE username = '$login'");
            $sql = $db->exec($sql);
            if($sql == 1){
                $password = sha1($password);
                $sql = $db->prepare("SELECT * FROM xxx WHERE username = '$login'");
                $sql = $db->exec($sql);
                $row = $sql->fetch();

                if($row['password'] == $password and $row['toplistadmin'] == 1){
                    $_SESSION['toplist_admin'] = 1;
                    $_SESSION['toplist_adminloged'] = 1;

                }
                else{
                    return false;
                }
            }
            else{
                return false;
            }


    }

}

?>

pdo 类看起来像:

<?php

require_once("../konfiguracja.php");

class mysql{
    public function connect(){
        try {
            $conn = new PDO('mysql:host=xxx;dbname=xxx', 'xxx', 'xxx');
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
        }
    }
}
?>

作为返回,我得到这样的错误:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'radiolev'@'localhost' (using password: NO) in /home/radiolev/public_html/top/toplist.class.php on line 10

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/radiolev/public_html/top/toplist.class.php on line 10

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'radiolev'@'localhost' (using password: NO) in /home/radiolev/public_html/top/toplist.class.php on line 11

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/radiolev/public_html/top/toplist.class.php on line 11

Fatal error: Call to a member function prepare() on a non-object in /home/radiolev/public_html/top/toplist.class.php on line 13

我不明白为什么它会出现,因为 mysql 密码很好。用普通的 mysql_connect 试过它们,它起作用了,但仍然不知道为什么它出现在 pdo 中;s

最佳答案

你不应该尝试将 mysql_real_escape_strings() 与 PDO 一起使用——它不在 PDO 库中(它在旧的和令人讨厌的 mysql 库中)并且使用不同的(global--blah)连接到数据库。

首先用 mysql_real_escape_strings() 去掉这两行。

其次,您使用的是准备好的语句,因此绑定(bind)您的值——这很容易!只需将变量替换为以冒号开头的占位符,而无需手动引用它。然后使用新创建的 PDOStatement(由 $db->prepare() 创建)的方法调用 bindValue()。最后在语句上调用 execute。

              $sql = $db->prepare("SELECT * FROM xxx WHERE username = :login ");
              $sql->bindValue(":login", $login);
              $result = $sql->execute();

这将安全地转义并防止在 mysql 服务器端注入(inject) $login 变量。

关于php - PDO 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112504/

相关文章:

php - 即使条件为空也显示连接表结果

php - 与搜索表单相关的自定义搜索查询

php - 在表 PHP 中显示时删除 Sql 中的记录

php - 如何转义 PDO 连接字符串中的特殊字符?

php - PDOStatement::nextRowset() 不适用于 dblib 和 MSSQL

ubuntu - nginx -> php5-fpm : Error in php not logged (anywhere! )

php - Jquery CSS 淡入淡出和淡出不同的 css 文件

mySQL将同一列中的两个值相除

php - 如何使用 javascript 重定向提交时的当前选项卡?

MySQL - 如何从 rss 提要转换日期时间