2011-08-14 13 views
8
<?php # Nettuts Tutorial using PHP Data Objects (PDO), 

/**This file contains the database access information 
*This file also establishes a connection to mySQL 
*and selects the database. 
*Set the database access information as constants: 
**/ 
// print_r(PDO::getAvailableDrivers()); 

DEFINE('DB_USER', 'root'); 
DEFINE('DB_PASSWORD', 'root'); 
DEFINE('DB_HOST', 'localhost'); 
DEFINE('DB_NAME', 'sitename'); 

$php = "htmlspecialchars"; 
try { 
    #MySQL with PDO_MYSQL 
    // $DBH = new PDO("mysql:host={$php(DB_HOST)}; dbname={$php(DB_NAME)}", root, root}; 
    $DBH = new PDO("mysql:host=localhost; dbname= sitename", root, root); 

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

    # UH-OH! Typed DELECT instead of SELECT! 
    $DBH->prepare('DELECT name FROM people'); 
} catch (PDOException $e) { 
    echo "I'm sorry, Dave. I'm afraid I can't do that."; 
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); 
} 
?> 

。コンソールを呼び出し、[14-8月 - 2011年15時59分59秒] PHPのお知らせ:未定義の定数ルートの利用 - で 'ルート' を想定し/アプリケーション/データベースのMAMP/htdocs3/nettuts/PHP/PDO 行/ mysql_pdo_connect.phpの20行目にアクセスしてください。は、OS Xが戻る「で

ここで私は「googled」し、部分的な答えを見つけました。だから私はここで完成を望んでいた。

あなたはTIA

+1

また、定数を補間するために '$ phpの= "はhtmlspecialchars"'回避策を使用しないでください。これは可能ですが、これが役に立つ特別なケースの1つではありません。あなたはPDO DSN init文字列を分割し、通常は定数を連結します: '= new PDO(" mysql:host = "。DB_HOST。" dbname = "。DB_NAME。"; ")' – mario

答えて

17

されている必要があります
$DBH = new PDO("mysql:host=localhost; dbname= sitename", root, root); 

:引用符で

$DBH = new PDO("mysql:host=localhost; dbname= sitename", 'root', 'root'); 

。さもなければPHPは文字列ではなく定数であると考えます。

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

UPDATE

私はまた、あなたがPDOでMySQLを使用していることを参照してください。しかし、あなたのコードを見て、私はあなたが単に行わないなぜデータベースにアクセスするためにconstantsを定義している参照してください。 safely use MySQL with PDOするために、あなたはdisable emulated prepared statementsに持っていることに注意してください:

$DBH = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASSWORD); 
$DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

は私も(UTF8に私の場合)DSN文字列にエンコーディングを設定していることに注意してください。また、コードで定数が本当に必要かどうかも疑問です。要求ごとに1つの接続(同じデータベース)を必要とすることが多いので、一度接続を作成して渡すだけでそれらのグローバルを浮かせる必要はないためですそれを必要とするコードの部分への接続。これについての詳細は、私の幾分related questionも参照してください。

0

あなたは上記のコードでrootどこでも呼ばれる定数を定義していない単一引用符

4

であなたの'root'文字列を配置する必要があります。その代わりにの値がの "root"のDB_USERという定数を定義し、同じ値のDB_PASSWORDを定義しました。このタイプの定数の仕組みの詳細については、the PHP documentation page for define()を参照してください。

これを試してみてください:

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

これらの引用符の並びは、必要です。私は新しいPDO( "mysql:host = DB_SERVER ...")を持っていましたが、これは私にエラーを引き起こしていました。 – Mark