2017-01-25 4 views
0

Ich bin neu in PDO. Ich versuche zu verstehen.Separate Verbindung von PDO

Was ist der beste Weg, um die Verbindung vom Rest mit PDO zu trennen?

Zum Beispiel. Ich habe diesen Code, der gut funktioniert:

<?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; 

Es könnte nützlich sein, die Verbindung in einer separaten Datei zu haben. Ich habe das versucht und es funktioniert gut, aber ich bin mir nicht sicher, ob es der beste Weg ist, es zu tun. Ist es in Ordnung, den Try-Catch nur mit der Verbindung zu haben?

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

Nun ... Es ist nicht so schlimm, aber Sie werden keine Fehler finden, die von einer verpfuschten Abfrage zurückgegeben werden - nur bestimmte Verbindungsfehler. Wenn in einer Abfrage ein Fehler auftritt, müssen Sie entweder eine separate Fehlerfunktionalität erstellen oder jeder Abfrage try/catch-Blöcke hinzufügen. – junkfoodjunkie

+0

Wenn Sie keine Verbindung zur Datenbank herstellen können, was dann? Was macht der Rest Ihrer App? Warum lässt du es weiterhin unnötig laufen, nur um mehr Fehler auf der ganzen Linie zu erzeugen? ** Warum fangen Sie die Ausnahme? ** – deceze

+0

@junkfoodjunkie was ist los mit Fehler nicht fangen? –

Antwort

0

ich versucht, und es funktioniert gut, aber ich bin nicht sicher, ob es der beste Weg, es zu tun ist.

Solange Ihr Code ein gewöhnlicher Spaghetti ist, wie oben gezeigt, ist alles in Ordnung.

Ist es in Ordnung, den Try-Catch nur mit der Verbindung zu haben?

ganz im Gegenteil, there shouldn't be a try catch mit der Verbindung als auch.

„Catch eine Ausnahme nur, wenn Sie eine Bearbeitungsszenario andere haben, als es nur berichten Andernfalls es nur Blase lassen auf einen standortweite Handler up (Beachten Sie, dass Sie nicht einen schreiben müssen, es gibt einen grundlegenden integrierten Handler in PHP, der ziemlich gut ist). "

-2

Wenn Sie versuchen, mögliche Ausnahme zu fangen, müssen Sie es überall dort tun, wo Sie mit der Datenbank kommunizieren. Sie müssen also versuchen, auch den Code zu fangen, der die Datenbank nach Daten fragt.

Ein weiterer Schritt besteht darin, Konzepte zum Abrufen von Daten aus der Datenbank zu trennen, die diese darstellen (indem sie an die Ausgabe gesendet werden, wie Sie es tun). Sie können ein MVC-Konzept überprüfen - wie es geht.

+1

Warum würde man try-catch um code wickeln, die Datenbank nach einigen Daten fragen? –

+0

Was passiert, wenn Sie einen Fehler in Ihrem SQL haben, wenn Sie Daten von der DB anfordern? Sie möchten möglicherweise einen Fehler mit dieser Ausnahme manipulieren. Wenn Sie diese Ausnahme nicht abfangen, sollte Ihre Anwendung möglicherweise mit einem schwerwiegenden Fehler enden. Deshalb. –

Verwandte Themen