使用PDO连接Mysql数据库无法正常工作

时间:2013-02-14 06:36:43

标签: pdo database-connection

我正在尝试使用我的PHP代码中的PDO模块连接到数据库。我已经阅读并搜索了类似的主题,但我无法弄清楚我做错了什么。请帮我解决这个问题。

  1. Apache版本:Apache / 2.2.21(Win32)PHP / 5.3.10

  2. 在php.ini文件中的
  3. ,我没有注释掉这行:extension = php_mysql.dll

    2a上。 phpinfo函数显示'Loaded Configuration File'位置为C:\ php \ php.ini

    2B。 PDIN驱动程序信息由phpinfo函数显示:    在PDO部分:PDO驱动程序 - > Mysql(已启用)    在PDO Driver for MySQL部分下:客户端API版本 - > mysqlnd 5.0.8-dev - 20102224 - $ Revision:321634 $(已启用)

  4. 我用来连接数据库的代码

    $db_user = "uid";
    $db_pass = "pd";
    
    $db_connect = new PDO('mysql:host=locahost; dbname=practice; charset=UTF-8', $db_user, $db_pass);
    if($db_connect){
        print "connected to the db " . "<br />";
    } else{
        print "error connects to the db. " . mysql_error();
    }
    

    我收到的错误消息:

    • 警告:PDO :: __ construct()[pdo .-- construct]:php_network_getaddresses:getaddrinfo failed:没有这样的主机。第14行的C:\ server \ htdocs \ html-exer \ handle_reg3.php
    • 警告:PDO :: __ construct()[pdo .-- construct]:[2002] php_network_getaddresses:getaddrinfo failed:没有这样的主机。 (尝试通过tcp:// locahost:3306连接)第14行的C:\ server \ htdocs \ html-exer \ handle_reg3.php
    • 致命错误:未捕获异常'PDOException',消息'SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo failed:没有这样的主机已知。 '在C:\ server \ htdocs \ html-exer \ handle_reg3.php:14堆栈跟踪:#0 C:\ server \ htdocs \ html-exer \ handle_reg3.php(14):PDO-&gt; __ construct('mysql: host = loca ...','root','password')在第14行的C:\ server \ htdocs \ html-exer \ handle_reg3.php中抛出#1 {main}

    编辑:添加了答案,要求提供更多信息,这些信息无疑将很快被删除:

    您的常识: 谢谢你的代码片段。它帮助我解决了这个问题。看来charset可能是原因。这是我连接到db

    的代码
    $dsn= 'mysql:host=localhost; dbname=practice; charset=utf8';
    $db_user = "root";
    $db_pass = "mypd";
    
     $db_connect = new PDO($dsn, $db_user, $db_pass);
     if($db_connect){
         print "connected to the db " . "<br />";
     }
    

4 个答案:

答案 0 :(得分:9)

看来你的服务器配置错误了 在DSN中使用127.0.0.1代替localhost

$dsn = 'mysql:host=127.0.0.1; dbname=practice; charset=utf8';
$pdo = new PDO($dsn, $db_user, $db_pass, $opt);

您需要阅读错误消息 它说你的PDO连接到localhost有问题。因此,您需要更改PDO连接字符串的地址。

你也使用错误的字符集名称,我已经纠正了

此外,mysql_error()对PDO无用。无需调用此函数,您已经抛出错误

答案 1 :(得分:3)

以防万一其他人从谷歌到这里。我有完全相同的问题,并重新启动apache修复它。

答案 2 :(得分:2)

如果以上所有答案都无法解决您的问题,请尝试为您的DSN指定端口号:

$this->con = new PDO("mysql:host=localhost;port=3306;dbname=my_db","root","secret");

这里我使用3306,因为它是我的Mysql默认端口号。

答案 3 :(得分:0)

要做的第一件事是在配置文件中仔细检查连接参数

这看起来很明显,但由于我刚刚使用“正确的值”配置了我的Symfony项目的parameters.yml,我没有立即考虑它,并认为问题出在其他地方。
我的dbname错了!