2014-12-12 2 views
-1

Я пытался выполнить команду с PHP SQL-CREATE, но у меня есть эта проблема: неSQLSTATE [3D000]: 1046 - База данных не выбрана

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'; 

?> 

А вот файл "connessione.php":

<?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(); 
} 

?> 

Я проверил файл "connessione.php" и соединение с базой данных прав. Кроме того, я проверил пользовательские привилегии, и у root есть все привилегии для базы данных «php» ... В чем проблема ?!

ответ

2

Проблематика линия является сама связь:

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

Помните, что это строка символов, так как они завернутые одинарными кавычками.

Измените их двойными кавычками, если вы хотите, чтобы переменные интерполировались.

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

Вы правы! Спасибо! Я был так смущен, когда не дал двойных запятых! –

+0

Я собирался ответить, а потом выскочил. Путь к отъезду;) –

+0

@DavideScanu уверенный человек рад, что это помогло – Ghost

0

СООТВЕТСТВУЕТ, как вам не хватает «host =» при создании дескриптора db. Я также рекомендую поиск SO или Google, прежде чем задавать вопросы - тонны хитов этого вопроса: PHP PDO: Unable to connect, Invalid catalog name

+0

Да, но ... Что я сделал не так с переменными? –

+0

А также ... Почему, если я делаю только соединение, все в порядке, и если я использую тот же код соединения для создания таблицы, это неправильно? –

+0

Nevermind, я не видел, чтобы вы установили «host =» в переменной - это странное соглашение. Я бы переместил часть «host =» в оператор, где вы создаете дескриптор, и оставляете переменную как значение «localhost». Легче отлаживать и легче изменять, если нужно. Откуда вы знаете, что соединение сделано? Я не вижу подтверждения или чего-то подтверждающего, так как вы уверены? Попробуйте повторить свои переменные, чтобы увидеть, содержат ли они то, что, по вашему мнению, они делают. – patricksweeney

Смежные вопросы