SQLSTATE [3D000]:1046 - 未选择数据库

时间:2014-12-12 01:36:17

标签: php mysql pdo

我试图用php执行SQL CREATE命令,但我遇到了这个问题:

  

SQLSTATE [3D000]:无效的目录名称:1046未选择数据库

我真的无法知道问题出在哪里,请你能帮帮我吗?

这是剧本:

<?php

include 'connessione.php';

try {
    $sql = 'CREATE TABLE joke (
            id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
            joketext TEXT,
            jokedate DATE NOT NULL 
            ) DEFAULT CHARACTER SET uft8 ENGINE=InnoDB';
    $pdo->exec($sql);
} catch (PDOException $e){
    $output = 'Errore nella creazione della tabella joke: ' . $e->getMessage();
    include 'output.html.php';
    exit();
}

$output = 'Tabella creata con successo.';
include 'output.html.php';

?>

在这里&#34; connessione.php&#34;文件:

<?php

$host = 'host=localhost'; 
$mysql_user = 'root';
$mysql_password = '';
$database = 'php';

try { 
    $pdo = new PDO('mysql:$host;dbname=$database', $mysql_user, $mysql_password); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) {
    $output = 'Impossibile connettersi al database: ' . $e->getmessage();
    include 'output.html.php';
    exit();
}

?>

我检查了&#34; connessione.php&#34;文件和数据库的连接是对的。此外,我检查了用户权限,root拥有&#34; php&#34;的所有权限。数据库......问题是什么?!

2 个答案:

答案 0 :(得分:2)

有问题的一行是连接本身:

$pdo = new PDO('mysql:$host;dbname=$database'

请记住,这是一个字符串文字,因为它们用单引号括起来。

如果要插入变量,请将它们改为双引号。

$pdo = new PDO("mysql:$host;dbname=$database", $mysql_user, $mysql_password);

答案 1 :(得分:0)

它看起来就像你错过了#34; host =&#34;在创建db句柄时。我还建议在提出问题之前搜索SO或Google - 此问题有大量点击:PHP PDO: Unable to connect, Invalid catalog name