2013-06-23 5 views
3

우선 모든 PHP 파일을 PDO으로 바 꾸었습니다. 그러나 나는 PHP와 함께 매우 경험이 없으므로 PDO을 보내고 있으므로 문제가 있습니다. 내 SQL databse에서 다음 쿼리를 실행하고 올바른 값을 반환합니다.PDO를 사용하여 MySql에 제대로 연결할 수 없음

SELECT * 
FROM table_gon_0621_516 
WHERE id = '1' 

지금 내가 그렇게

require_once ("../Android/connect_db.php"); 

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$table_name = 'table_gon_0621_516'; 

try { 

    $names = $db->query(" 
     SELECT * 
     FROM `".$table_name."` 
     WHERE `id` = '1' 
     "); 

    $rows = $names->fetchAll(PDO::FETCH_ASSOC); 
    $col_map = array_flip($rows); 
    echo '<pre>', print_r($rows, true), '</pre>'; 
} catch (PDOException $e){ 
    die($e->getMessage()); 
}  

처럼 내 PHP이 사용하고 난 내 브라우저

SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected 

에서이 오류가 이건 내 연결 코드

<?php 

$config['db'] = array (
    'host'  => 'localhost', 
    'username' => 'admin', 
    'password' => 'xxxx', //checked and correct 
    'dbname' => 'xxxx_beta' //checked and correct 
); 

$db = new PDO(
    'mysql:host = '.$config['db']['host'].'; 
    dbname = '.$config['db']['dbname'], 
    $config['db']['username'], 
    $config['db']['password'] 
); 
?> 

이 페이지가 올바르게로드되고, 오류가 없으며 성공적으로 연결됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집 나는

$data = $names->fetch(PDO::FETCH_ASSOC); 

$data = $names->fetchAll(PDO::FETCH_ASSOC); 

을 변경하고 난 여전히 같은 문제에 봉착했습니다. 또한

2 EDIT 나는 새로운 메시지가 위의 지금 내 코드를 변경

, 내가 믿고있어 I가 연결되어 있지 않다 이러한 변화를 보여주기 위해 위의 코드를 업데이트?

+0

은 (는) 모든 오류를보고하고 표시 할 수 있습니까? –

+1

''$ table_name''을 쿼리에 집어 넣었으므로''FROM' ". $ table_name."'''을''FROM'$ table_name'''으로 대체 할 수 있습니다. – mzedeler

+0

@mzedeler 좋은, 나는 그것을 몰랐다, 나는 그것을 시도 할 것이다. 감사! –

답변

4

변경

$db = new PDO(
    'mysql:host = '.$config['db']['host'].'; 
    dbname = '.$config['db']['dbname'], 
    $config['db']['username'], 
    $config['db']['password'] 
); 

$db = new PDO('mysql:host='.$config['db']['host'].';dbname='.$config['db']['dbname'], 
    $config['db']['username'], 
    $config['db']['password'] 
); 

또는

$db = new PDO(
    "mysql:host={$config['db']['host']};dbname={$config['db']['dbname']}", 
    $config['db']['username'], 
    $config['db']['password'] 
); 

에 분명히 MySQL을 PDO 드라이버는 DSN에 공백을 좋아하지 않는다.

mysql:host='.$config['db']['host'].';dbname='.$config['db']['dbname'] 
      ^^        ^^ 
+0

농담이 아니십니까? 나는 그것을 읽기 쉽게하기 위해 노력했다. 나는 이것을 시도 할 것이고 나는 진심으로 당신이 옳았기를 바란다. –

+1

그것은 일했다! 그게 문제라고 믿을 수가 없네. 코드를 읽기 쉽게. 나는 지금부터해야한다면 한 줄에 모두 넣을 것이다. 정말 고맙습니다. –

+0

@i_me_mine 여전히 쉽게 읽을 수 있습니다. "dbname"바로 전에 작은 따옴표와 세미콜론을 다음 줄로 옮기십시오. – landons

관련 문제