Как выполнять запросы с помощью функции подключения pdo db? - PullRequest
0 голосов
/ 11 ноября 2018

Я прочитал слишком много вопросов и ответов, но не был уверен. У меня 2 вопроса

1.Я превратил свое соединение с БД в функцию, и я не уверен, что его безопасно?

define('DB_SERVER', 'localhost'); 
define('DB_USERNAME', 'root'); 
define('DB_PASSWORD', ''); 
define('DB_NAME', 'demo'); 

function DB()
{
    try {
        $pdo = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME.'', DB_USERNAME, DB_PASSWORD);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    } catch (PDOException $e) {
        return "Error!: " . $e->getMessage();
        die();
    }
}

2. Мой запрос выполнен правильно?

запрос:

try {
    $pdo = DB();
    $stmt = $pdo->prepare("SELECT * FROM settings"); 
    $stmt->execute();
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
                        $c = htmlspecialchars($row['site_url']);
                        $e = filterString($row['contact']);
    } 
    unset($stmt);   
    } catch (PDOException $e) {
            exit($e->getMessage());
        }

Спасибо за любую помощь

1 Ответ

0 голосов
/ 11 ноября 2018

Возможно сохранить одно соединение, а не открывать несколько соединений с базой данных. Вы можете посмотреть на проект PDOEasy , который я создал, чтобы упростить MVC с помощью PDO, или использовать приведенный ниже статический пример.

class DB
{
     private $_connection;
     private static $_instance;

     public static function getInstance() {
         if(self::$_instance) return self::$_instance;
         self::$_instance = new self();
         return self::$_instance;
     }

     private function __construct() {
         $this->_connection = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME.'', DB_USERNAME, DB_PASSWORD, array(
              PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
              PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
              PDO::ATTR_EMULATE_PREPARES => false
         ));
     }

     public function getConnection() { return $this->_connection; }
}

Что можно использовать так:

$stmt = DB::getInstance()
            ->getConnection()
            ->Prepare('SELECT * FROM settings');

$stmt->execute();
foreach($stmt->fetchAll() as $row) {
    // ...
}
...