Mysql - PDO错误 - 目录名称无效:1046未选择数据库

时间:2015-02-26 23:29:26

标签: php mysql pdo cpanel

我有PDO的问题,我绝对不知道他来的地方。我无法质疑我的MySQL数据库。只是为了测试我使用了下面的代码(以前配置的连接参数非常糟糕:

try {
    $dbh= new PDO('mysql:host=serverName;dbname=Mydatabase','user','password');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e) {
    die('Erreur : ' . $e->getMessage());
}

var_dump($dbh);    // gives : object(PDO)#1 (0) { }

$res=$dbh->query('SELECT * FROM table');

与MySQL正确连接,但在查询后我收到此错误:

  

致命错误:未捕获的异常' PDOException'消息' SQLSTATE [3D000]:无效的目录名称:1046未选择数据库'在/home/outout/public_html/file.php:16堆栈跟踪:#0 /home/outout/public_html/file.php(16):PDO->查询(' select * from t ...& #39;)在第16行的/home/outout/public_html/file.php中抛出#1 {main}。

代码适用于本地计算机,但只要我将其置于联机状态(cPanel),就会显示此错误。我是否必须在.htaccess中配置PDO?

我绝对不明白问题出在哪里。有人会有想法吗?

7 个答案:

答案 0 :(得分:10)

帮助Mysql解析句柄。

而不是:

$res=$dbh->query('SELECT * FROM table');

尝试:

$res=$dbh->query('SELECT * FROM Mydatabase.table');

答案 1 :(得分:2)

我遇到同样的问题,但是没有用'mysql'(mysql:host)提及'host'字符串。我通过遵循以下代码解决了这个问题。

class Database{
    protected static $pdo;
    public function __construct(){}

    public function connect(){
        $dsn="mysql:host=localhost;dbname=dbname";
        try{
        self::$pdo = new PDO($dsn,"root","");
        self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
        echo 'Connected';
        return self::$pdo;
        }catch(PDOException $ex){
            echo $ex->getMessage();
        }
        return false;
    }
    public function getConnection(){
        return self::$pdo;
    }
}

答案 2 :(得分:1)

而不是:

$res=$dbh->query('SELECT * FROM table');

只是这样做:

  $res=$dbh->query('SELECT * FROM dbname.tablename');

你会很高兴。

答案 3 :(得分:0)

$dbh= new PDO('mysql:host=serverName;dbname=Mydatabase','user','password');

这是错误的。你不能拥有host = serverName,而是需要像host = $ serverName,然后是$ serverName =“servername.domanin”;与dbname = Mydatabase相同,你需要制作那些变量,$ Mydatabase =“mydatabase”它应该是这样的:

$servername = "servername";
$username = "username";
$password = "password";
$dbname = "dbname";

    try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "Connection ok!";
    } catch (PDOException $e) {
    echo "Err: " . $e->getMessage();
    }

    $conn = null;

这会奏效。 有关详细信息:http://www.w3schools.com/php/php_mysql_connect.asp

我有同样的错误,这是因为我没有在字符串中使用dbname = $ dbname而是使用$ dbname = $ dbname,只是一个错字。你需要正确地写出字符串!

答案 4 :(得分:0)

让我感到震惊的是,我从MySQL工作台中的树中复制了数据库名称,并将其粘贴到settings.php文件中。 原来,字符串开头和结尾的撇号都是假撇号!我删除了它们,并放入真实的撇号,然后一切都正常运行了。花了我几个小时来解决这个问题。 希望这对其他人有帮助。

答案 5 :(得分:0)

使用关键字相同的数据库名不要改变它们

public function conect(){
        $this->conn = null;
        
        try {

       $this->conn = new PDO('mysql:host='.$this->host.';dbname='.$this->db_name, $this->username, $this->password);
     //    $this->conn = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->db_name, $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
        echo 'Connection Error: ' . $e->getMessage();
      }
        return $this->conn;

    }

答案 6 :(得分:-2)

使用

$database -> query(' SELECT * FROM "database_name"."table_name" ');

而不是

$database -> query(' SELECT * FROM "table_name" ');