我的 pdo 连接不起作用

Posted

技术标签:

【中文标题】我的 pdo 连接不起作用【英文标题】:my pdo connection doesn't work 【发布时间】:2015-05-05 04:25:08 【问题描述】:

与我之前关于 SQL 注入的问题相呼应。我正在尝试建立 PDO 连接。

为此,我想用新代码替换旧代码:

这是旧的

$conn = mysql_connect("localhost", "sec", "dubbelgeheim") or
            die('Error: ' . mysql_error());

    mysql_select_db("bookshop");

    $SQL = "select * from productcomment where ProductId='" . $input . "'";
    $result = mysql_query($SQL) or die('Error: ' . mysql_error());

    $row = mysql_fetch_array($result);
    if ($row['ProductId']) 
        echo "Product:" . $row['ProductId'] . "<br>";
        echo "Annotation:" . $row['Comment'] . "<br>";
        echo "TestOK!<br>";
     else
        echo "No Record!";

    mysql_free_result($result);
    mysql_close();

这是新的:

$input = $_GET['input'];

if ($input) 
    $user= 'sec';
      $pass = 'dubbelgeheim';
    try 
        $dbConn = new PDO('mysql:host=127.0.0.1;dbname=bookshop', $user, $pass);
     catch (PDOException $e) 
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    
    $escaper = $db->real_escape_string($input);
    $statement = $db->prepare("SELECT * FROM productcomment WHERE ProductId = ? LIMIT 1");
    $statement->bind_param("s", $escaper);
    $statement->execute();
    $result = $statement->get_result();
    $statement->close();
    $count = $result->num_rows;
    if ($count > 0) 
        while ($row = $result->fetch_assoc()) 
            echo "Product:" . $row['ProductId'] . "<br>";
            echo "Annotation:" . $row['Comment'] . "<br>";
            echo "TestOK!<br>";
        
     
    else 
        echo 'No record!';
    
    $result->free();
    $db->close();

当我尝试这个新代码时..它给出了以下错误:

错误!:SQLSTATE[HY000] [1045] 拒绝用户访问 'sec'@'localhost'(使用密码:YES)

我也尝试将 localhost 替换为 127.0.0.1。

我的目标是使我的页面能够安全地进行 SQL 注入。

愿任何人有一个很好的解决方案!

【问题讨论】:

您的用户名和密码都可以吗?您似乎没有该登录名的权限 旧代码可以正常工作,为什么使用PDO时不行? 您似乎混淆了 PDO 和 mysqli 方法,尽管这与您当前的问题无关。 你能仔细检查用户名密码和数据库名称吗?那里可能有一些你忽略的错字 我使用phpmyadmin作为我的数据库,默认是root和usbw,也试过了,但同样的错误 【参考方案1】:

代码乍一看还不错。 尝试this 解决方案。看起来这个匿名用户可能是问题所在。

编辑:(在 cmets 中建议)

总结: 推荐的解决方案是删除此匿名用户。通过执行

DROP USER ''@'localhost';

【讨论】:

代码很多,但我没有使用 linux 来配置我的 apache。我使用usbwebserver 你应该关注“推荐的解决方案是删除这个匿名用户(这通常是一件好事)。”部分。顺便说一句 - 为什么不赞成 o.O ? 我试过 'DELETE FROM mysql.user WHERE User='';'然后是“FLUSH PRIVILEGES”,但没有帮助 尝试 DROP USER ''@'localhost';在您的测试环境中。

以上是关于我的 pdo 连接不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 连接 Mysql 数据库不起作用

我的 PDO 声明不起作用

我的 PDO 声明不起作用

我的 PDO 声明不起作用

PHP PDO事务回滚不起作用

PHP:PDO foreach 不起作用