2015-02-02 14 views
1

방금 ​​PDO를 사용하여 "test2"라는 MySQL 데이터베이스를 만들었습니다. 이제 "Visiteurs"라는 테이블을 만들려고하지만 내 코드가 제대로 작동하지 않는 것 같습니다. "SQLSTATE [3D000] : 잘못된 카탈로그 이름 : 1046 선택 없음 데이터베이스"PDO로 MySQL 테이블을 만들 때 오류가 발생했습니다

오류가 에코

은 (내가 생각하는 잘못) 내 코드는 다음과 같다 :

$serveur = "localhost"; 
$login = "root"; 
$pass = "root"; 

     try{ 
      $conn = new PDO("mysql:host = $serveur; dbname = test2", $login, $pass); 

      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

      $codesql = "CREATE TABLE Visiteurs (
       id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
       nom VARCHAR(50) NOT NULL, 
       prenom VARCHAR(50) NOT NULL, 
       email VARCHAR(70) 
      )"; 

      $conn->exec($codesql); 
      echo 'Table "Visiteurs" créée !'; 
     } 

     catch(PDOException $e) { 
      echo 'Echec : ' . $e->getMessage(); 
     } 

누군가가 나를 찾을 수 있습니다 오류는 어디에 있습니까? 고맙습니다!

+2

DSN 문자열에 공백을 사용할 수 없습니다. 귀하의'dbname' 파싱되지 않습니다. ' "mysql : host = $ serveur; dbname = test2"' –

+0

사실, 일단 공백을 제거하면 성공했습니다! 그런데 이상하게도 성공적으로 데이터베이스를 만들고 동일한 코드 (공백 포함)와 오류없이이 데이터베이스에 연결할 수 있습니다. 어쨌든 고맙습니다.이 팁은 중요합니다! –

+0

아 좋아! 이 답변에 감사드립니다. 그 때 내 질문을 삭제해야합니까, 아니면 최선의 답을 선택할 수 있습니까? (내 질문에 "댓글을 달았을 때 어떻게 해야할지 모르겠다 ...) –

답변

0

은 공백에 대해 구체적이지 않습니다. 경험에 의하면 공백은 DSN 문자열에 허용되지 않습니다. dbname = test2이 있으므로 dbname은 실제로 구문 분석 및 사용되지 않으므로 PDO는 데이터베이스가 선택되지 않았다고 불평합니다. 귀하의 DSN은 key=value쌍 사이에 공백없이 다음과 같이한다 : 당신은 이전 연결이 성공하고 당신이 CREATE DATABASE 문을 발행 할 수 있다고 설명에서 언급

"mysql:host=$serveur;dbname=test2" 

. 이는 기본값 인 호스트가 localhost이고 $serveur 변수가 localhost으로 설정 되었기 때문입니다. PDO는 아마도 host= 매개 변수를 DSN에서 구문 분석하지 않았지만 localhost을 사용자 자격 증명과의 기본 연결로 사용했습니다. CREATE DATABASE 문에는 데이터베이스가 선택되어있을 필요가 없기 때문에 dbname=은 부적절합니다.