2013-04-23 2 views
3

PDO 연결에서 상수를 사용하거나 PDO 연결을 포함하는 함수를 호출 할 때 문제가 있습니다.PDO 연결 문자열에 상수 사용 및 PDO 연결로 함수 호출

필요한 경우에만 DB에 연결하는 기능을 사용하고 있습니다. DB 작업이 필요없는 페이지에서는 연결할 필요가 없습니다.

나는 많은 시도를했지만, 내가 잘못 될 수는 없다.

<?php 
/** The name of the database */ 
define('DB_NAME', 'dev-db'); 

/** MySQL database username */ 
define('DB_USER', 'root'); 

/** MySQL database password */ 
define('DB_PASSWORD', 'dxdb'); 

/** MySQL hostname */ 
define('DB_HOST', 'localhost'); 

function connect(){ 
try 
    {**//Here's where the first problem is** 
     $conn = new PDO('mysql:host=DB_HOST;dbname=DB_NAME',DB_USER,DB_PASSWORD); 
     $conn ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    }catch(PDOException $e) 
    { 
     echo 'ERROR: ' . $e->getMessage(); 
    } 
} 

connect();// Here's where it fails again 

$sql = 'insert into names (names) values (:what)'; 
$what = "testValue"; 
$stmt = $conn->prepare($sql); 
$stmt->bindParam(':what', $what, PDO::PARAM_STR, 5); 
$stmt->execute(); 
+0

당신이'$ CONN = 새로운 PDO ('MySQL은 같은 문자열을 연결해야한다 : (DEV-DB가 유효한 데이터베이스 이름 인 경우 확실하지 오전하지만)

그래서, 코드가 될 수있다 : DB_HOST. '; dbname ='. DB_NAME. ', DB_USER, DB_PASSWORD);' – HamZa

+0

오! 오래된 것들은 연결을 필요로하지 않았다.''$ link = mysql_connect (DB_HOST, DB_USER, DB_PASSWORD); "그래서 나는 여기가 같을 것이라고 생각했다. – Norman

+0

글쎄, PHP는'echo 'DB_HOST';'는 문자열이나 상수라고 어떻게 말할 것인가? 그것은 문자열입니다 :-) – HamZa

답변

2

,이 질문은 PDO와는 아무 상관이없는, 오히려와 PHP 문자열.

그래서 문제는 "문자열에서 상수를 사용하는 방법"입니다.

대답은 매우 간단합니다. 문자열로 연결하십시오.

또한 연결하는 방식이 잘못되었습니다. 적절한 방법은 tag wiki을 참조하십시오.

두 번째 문제는 PDB와 다시 관련이 없으므로 단지 variable scope 문제입니다. 그냥 함수 반환 $conn 변수 확인 후 또한

$conn = connect(); 

전화, PDO를 사용하는 경우 호스트 및 데이터베이스에 대한 별도의 상수를 정의하는 아무 소용이 없다 - DSN 다른에서 HOST와 비슷한 별개의 실체이며, 운전자.

define('DB_DSN', 'mysql:host=localhost;dbname=dev-db;charset=utf8'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', 'dxdb'); 

function connect() 
{ 
    $opt = array(
     PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
    ); 
    return new PDO(DB_DSN,DB_USER,DB_PASSWORD, $opt); 
} 
$conn = connect(); 
2

더 좋은 방법은 직접 연결 문을 사용하는 것이므로 귀하의 경우에는 기능이 필요하지 않습니다. 사실

$conn = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME , DB_USER,DB_PASSWORD); 
+0

실제로 필요한 경우에만 연결할 수 있도록 실제로이 기능을 사용하고 싶습니다. 나는이 질문에 대해 모두 함께 여기에 넣어. 그렇지 않으면, 상수는 하나의 파일에 있고, 연결은 다른 파일에 있습니다. 연결할 필요가없는 경우에도 연결이 실행됩니다. – Norman