我有两个文件,一个叫做connection.php,一个叫做suggest.php,在connection.php 中我用一个叫做connectDB 的函数完美地完成了连接,我在suggest.php 中使用它没有任何问题。
但是,我有另一个函数,我想用 SELECT 显示数据库中的信息,我也想通过一个函数来实现。PHP 抛出的错误如下:
致命错误:在第 18 行 C:\AppServ\www\object\db\inc\connection.php 中的 null 上调用成员函数 query()
我不是很专家,但我认为这与变量的范围有关,因为在 connectDB 函数中有变量(对象)$db。
我可以将该变量设为全局变量,以便在所有函数中使用它吗?我该怎么做?
建议.php
<?php
include 'connection.php';
connectDB('root','administrador');
selectMedia();
?>
连接.php
function connectDB($user, $pass, $dsn = 'mysql:host=localhost;dbname=database'){
try {
$db = new PDO($dsn, $user, $pass);
$db->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER);
} catch (Exception $e) {
echo "Error: " . $e->getMessage()."<br>";
echo "Código de excepción: " . $e->getCode()."<br>";
echo "Línea fuente: " . $e->getLine()."<br>";
echo "Archivo: " . $e->getFile();
}
}
function selectMedia(){
try {
$results = $db->query("SELECT title, category FROM Media");
echo "Cool!";
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
}
?>
创建变量
global
不是一个好习惯/全局是邪恶的您可以创建一个文件
global
,例如存储应用程序的所有基本功能,在这种情况下,例如连接到数据库的配置connectDB(...)
。连接.php
创建文件后,
global
您可以将其包含在您始终需要它的任何文件中。任何文件.php
@aldanux 提出的解决方案的单一维度,如果您的connection.php文件在多个文件中调用,我建议您使用 include_once
这与普通包含完全相同,但如果您的文件已经包含,则不会再次包含它,这将避免由于已经定义的变量而导致的错误。
更优雅的方法是在单独的 .php 中创建一个类,并使用单例模式来拥有您要创建的对象的单个实例(在这种情况下是您假定的全局变量),以便您始终可以从任何地方访问它这始终是实例化的,并且对整个项目具有独特的价值。我给你一个链接来指导你: https ://www.uno-de-piera.com/el-patron-singleton-en-php/
也许您徒劳地使自己复杂化?我认为您可以通过函数中的简单返回来解决所有问题:
更简单,更简单的东西,首先我们得到一个
function
更清洁的方法是创建一个config.ini.php 文件而在需要数据库连接的PHP文档中,通过
include_once
在文件内部创建连接,假设变量
$con
具有连接的值。只需将PHP
global
保留字之一添加到function
例子: