2017-01-25 6 views
0

私はPDOが初めてです。私は理解しようとする。PDOからの別個の接続

PDOを使用して接続を分離する最も良い方法は何ですか?

たとえば、私はうまく動作するこのコードを持っています:

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "podcast"; 

try { 
    $conn = new PDO("mysql:host=$servername; dbname=$dbname", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    echo "Connected successfully <br>"; 

    $sql = "SELECT podcast, text 
      FROM bookmarks 
      WHERE data = :data"; 
    $statement = $conn->prepare($sql); 
    $data = 1; 
    $statement->bindValue(':data', $data); 
    $statement->execute(); 
    echo $statement->rowCount() . " records SELECTED successfully <br>"; 

    $rows = $statement->fetchAll(); 
    foreach($rows as $row){ 
     echo $row['podcast'] . '<br>'; 
     echo $row['text'] . '<br>'; 
    } 
} 
catch(PDOException $e) { 
    echo "Error: " . $e->getMessage(); 
} 
$conn = null; 

別々のファイルに接続すると便利かもしれません。私はそれを試みたが、それはうまくいくが、それが最良の方法であるかどうかはわからない。接続だけでtry-catchを持つのはいいですか?

のindex.php:

include("includes/connetion.php") 
$sql = "SELECT podcast, text 
     FROM bookmarks 
     WHERE data = :data"; 
$statement = $conn->prepare($sql); 
$data = 1; 
$statement->bindValue(':data', $data); 
$statement->execute(); 
echo $statement->rowCount() . " records SELECTED successfully <br>"; 

$rows = $statement->fetchAll(); 
foreach($rows as $row){ 
    echo $row['podcast'] . '<br>'; 
    echo $row['text'] . '<br>'; 
} 

$conn = null; 

connection.php:

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "podcast"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // $conn = new PDO("sqlite:/Applications/MAMP/db/sqlite/podcast", $username, $password); //Lite 

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    echo "Connected successfully <br>"; 
    } 

catch(PDOException $e) 
    { 
    echo "Connection failed: " . $e->getMessage(); 
    } 
?> 
+0

まあ...それほど悪くはありませんが、不正なクエリによって返されたエラーは検出されません。特定の接続エラーのみです。クエリにエラーがある場合は、個別のエラー機能を作成するか、各クエリにtry/catchブロックを追加する必要があります。 – junkfoodjunkie

+0

データベースに接続できない場合は、何ですか?アプリケーションの残りの部分は何をするつもりですか?あなたは、ラインの下でより多くのエラーを生成するために、なぜ不必要に実行し続けるのですか? **なぜ例外をキャッチしていますか?** – deceze

+0

@junkfoodjunkieエラーをキャッチしていないのは何ですか? –

答えて

0

私はそれを試してみましたが、それがうまく動作しますが、私はそれはそれを行うための最善の方法であるかどうかわからないです。

あなたのコードが上記のような通常のスパゲッティである限り、includeを使用しても問題ありません。

接続だけでtry-catchを使用してもよろしいですか?

かなり反して、同様の接続とthere shouldn't be a try catch:。

「あなたはそれを報告する以外の処理シナリオを持っている場合にのみ、例外をキャッチし、サイト全体のハンドラにそれ以外の場合はそれを聞かせてバブルアップ( PHPには基本的な組み込みハンドラがありますが、これは非常に良いものです)。

-2

可能性のある例外をキャッチしようとしている場合は、どこでもデータベースと通信する必要があります。だから、データベースに何らかのデータを要求するコードの周りにtry-catchをラップする必要があります。

もう1つのステップは、データをデータベースから取得し、それを表すデータベースから概念を分離することです。あなたはいくつかのMVCの概念を確認することができます - それを行う方法。

+1

なぜ、データベースに何らかのデータを要求するコードの周りにtry-catchをラップするのはなぜですか? –

+0

DBからデータを要求しているときにSQLに間違いがあったらどうしますか?あなたはその例外で操作可能なミスをキャッチしたい。あなたがその例外をキャッチしていない場合、アプリケーションはおそらく致命的なエラーで終了するはずです。それが理由です。 –

関連する問題