Php 替换全局$PDO对象以维护安全性
我将connection.php文件设置为: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,
<?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类是一个非常糟糕的主意。