Php 替换全局$PDO对象以维护安全性

Php 替换全局$PDO对象以维护安全性,php,pdo,Php,Pdo,我将connection.php文件设置为: <?php $dsn='mysql:host=localhost;dbname=sakila'; $hostname='localhost'; $username='root'; $password=''; $PDO_ob = new PDO($dsn, $username, $password); try { $PDO_ob = new PDO($dsn, $username,

我将connection.php文件设置为:

<?php

       $dsn='mysql:host=localhost;dbname=sakila';
   $hostname='localhost';
   $username='root';
   $password='';
    $PDO_ob = new PDO($dsn, $username, $password);
   try {
        $PDO_ob = new PDO($dsn, $username, $password);
        $PDO_ob->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          echo " connection success";
    } catch (PDOException $ex) {
        echo 'Connection failed: ' . $ex->getMessage();
    }
   ?>  
And functions.php  as :

    <?php 
    include "../category_prodct_pdo/connection.php";

    function get_products(){
        global $PDO_ob;


        $sql="SELECT * FROM products";
        $products=$PDO_ob->query($sql); 
        return $products;
    }
    ?>

和functions.php作为:
当我删除glopal$PDO_op;我收到一条错误消息 “未定义变量:PDO_ob” 我知道在函数中使用全局变量并不是最好的实现 那么,如果不在函数内部使用global,如何使其工作呢
提前感谢您

除了评论和建议之外,我还建议使用一个类进行数据库连接,并使用get instance函数

final class DatabaseFactory
{
    public $pdo;
    public static function Instance()
    {
        static $inst = null;
        if ($inst === null) {
            $inst = new DatabaseFactory();
        }
        return $inst;
    }

    /**
     * Private ctor so nobody else can instantiate it
     *
     */
    private function __construct()
    {
         $dsn='mysql:host=localhost;dbname=sakila';
       $hostname='localhost';
       $username='root'; // avoid connecting with root user 
       $password='{put password for db connection, it is more secure}';
       try {
            $this->pdo = new PDO($dsn, $username, $password);
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
              echo " connection success";
        } catch (PDOException $ex) {
            echo 'Connection failed: ' . $ex->getMessage();
        }
    }
}

函数get_products($PDO_ob){…}
令人毛骨悚然。在您发布的代码中,and和安全性/变量范围实际上并不相关,但如果它能让您编写出更好的代码,那么我可以假装它们是相关的。为什么在
尝试
并在其内部再次尝试之前,您要将
$PDO_ob
分配两次?我建议继续使用global。global没有安全问题,对于这样的代码,可以使用它听起来你需要回顾一下PHP教程中关于函数的章节,它将解释如何将参数传递给函数。Bammer:将$PDO_ob分配两次复制代码是一个错误谢谢你,我还是初学者,我想学习解决问题的方法,而无需进一步协作非常感谢你,但是,我不知道如何从数据库中创建类yetSingleton DB类是一个非常糟糕的主意。