与PDO分开连接

时间:2017-01-25 15:11:24

标签: php pdo database-connection

我是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();
    }
?>

2 个答案:

答案 0 :(得分:0)

  

我试过了,效果很好,但我不确定这是不是最好的方法。

只要你的代码是如上所示的通常的意大利面条,它就可以包含。

  

只有连接才能使用try-catch吗?

完全相反,there shouldn't be a try catch也有连接:

&#34;仅当您有一个处理方案而不仅仅是报告它时才捕获例外。否则只需让它冒泡到站点范围的处理程序(请注意,您不必编写一个,PHP中有一个基本的内置处理程序,这非常好)。&#34;

答案 1 :(得分:-2)

如果您尝试捕获可能的异常,则必须在与数据库通信的任何地方执行此操作。所以你必须在try-catch中包装代码,这些代码会向数据库索取一些数据。

另一个步骤是分离从表示它们的数据库中获取数据的概念(将它们发送到输出时)。您可以查看一些MVC概念 - 如何操作。