使用PDO连接

时间:2012-11-14 05:51:07

标签: php pdo

刚开始使用PDO。请解释我的连接错误。它总是显示“你已连接”。

    <?php

       define('user','root');
       define('pass','');
       define('db','login_db');

       try
          {
       $dbh = new PDO("mysql:host = localhost; dbname = db",user,pass);
       echo "You are connected";
          }
       catch(PDOException $e)
          {
       echo $e -> getMessage(); 
          }
    ?>

还提供了一些您知道的PDO教程或电子书。提前谢谢。

2 个答案:

答案 0 :(得分:1)

问题是由数据源名称(DSN)中的2个语法错误引起的(PDO连接字符串中的第一个参数)。

错误

  1. 您无法将数据库常量作为"...dbname = db"传递给连接字符串。由于db包含在双引号中,因此将被解释为字符串而不是常量。
  2. 您的DSN中不能包含空格。它应该是:

    "mysql:host=localhost;dbname=login_db" //no spaces.
    
  3. 我测试了这个,它表现出一些奇怪的行为:

    • 具体来说,host与第一个=符号之间的空格似乎会导致问题。如果有空格,即使“localhost”拼写错误,也会回显"You are connected"
    • 同样,如果dbname与其=符号之间有空格,即使指定的数据库名称不正确,也会显示连接。

    我的猜测是,这是PDO类如何解析DSN的一些怪癖。

    解决方案

    从DSN中删除所有空格。

    您还需要以不同的方式传入数据库名称。有不同的方法来解决这个问题。为了不再有任何奇怪的调试错误,我建议您使用变量而不是常量定义:

    $host = 'localhost';
    $user = 'root';
    $pass = '';
    $db   = 'login_db';
    
    try{
        $dbh = new PDO("mysql:host=$host;dbname=$db",$user,$pass);
        echo "You are connected";
    }
    catch(PDOException $e){
        echo $e -> getMessage(); 
    }
    

    至于好的教程,你可以看看这些:

    Net.tuts+ : PHP Database Access

    Net.tuts+ : Why use PDOs

    当然不要忘记php.net文档。

    php.net : PDOs

答案 1 :(得分:0)

常量标识符应为大写:

 define('USER','root');

如果你想使用常量,你可以这样做:

$dbh = new PDO("mysql:host = ". HOST .";dbname=" . DB ,USER,PASS);