【问题标题】:How to do queries with pdo db connection function?如何使用 pdo db 连接功能进行查询?
【发布时间】:2019-04-14 08:42:30
【问题描述】:

我阅读了太多问题和答案,但无法确定。 我有两个问题

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

感谢您的帮助

【问题讨论】:

    标签: mysqli pdo php-7


    【解决方案1】:

    也许保持一个连接,而不是打开多个到数据库的连接。您可以查看我创建的项目PDOEasy,以便使用 PDO 简化 MVC 或使用以下静态示例。

    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) {
        // ...
    }
    

    【讨论】:

    • 看起来不错,但如何让函数发挥作用?示例函数function catplace($par){ Global $pdo; $stmt = $pdo->prepare("SELECT * FROM categories WHERE place=:par ORDER BY created ASC"); $stmt->execute(array(':par'=>$par)); $b = $stmt->fetchAll(PDO::FETCH_ASSOC); return $b; }
    • 您可以将like soPDOEasy 一起使用。
    • 哇哦,非常感谢,我知道了,将再次使用您的课程,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多