Php 为什么即使在I';你在上面连接了吗?
为什么即使在连接之后,我与数据库的连接仍不能正常工作 这是我存储连接的文件:Php 为什么即使在I';你在上面连接了吗?,php,Php,为什么即使在连接之后,我与数据库的连接仍不能正常工作 这是我存储连接的文件:dbase.php <?php function connect() { try { $conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.'',DB_USER,DB_PASSWORD); $conn ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_S
dbase.php
<?php
function connect()
{
try
{
$conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.'',DB_USER,DB_PASSWORD);
$conn ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
}catch(PDOException $e)
{
echo 'Error in reaching database: '.$e->getMessage();
#Send an email to the admin
#Display the error page
die();
}
return $conn;
}
?>
甚至当我在上面的页面中连接到数据库时,当脚本调用函数时,我也会得到:注意:第25行的C:\web\apache\htdocs\index.php中的未定义变量:conn致命错误:在第25行的C:\web\apache\htdocs\index.php中的非对象上调用成员函数prepare()。我已在文件中标记了第25行。
为什么会发生这种情况,我该如何解决呢?`改变
function fetchElements($one,$two)
{
...
到
改变
到
将
$conn
作为fetchElements
函数中的参数传递到此处
function fetchElements($one,$two, $conn) {
然后分配到这里
fetchElements($row['level'],$row['id'], $conn);
不要在
fetchElements
函数中使用在此处传递$conn
作为参数
function fetchElements($one,$two, $conn) {
然后分配到这里
fetchElements($row['level'],$row['id'], $conn);
不要使用全局变量(如$conn
)在函数中不会自动可用
你有两种方法:
A:将变量作为函数参数传递:
function fetchElements($conn,$one,$two)
{
....
}
调用fetchElements($conn,$1,$2)代码>
B:使用global
关键字:
function fetchElements($one,$two)
{
global $conn;
....
}
方法A更灵活、更好(在我看来),因为例如,您可以有多个PDO连接,并且可以在每次调用的基础上决定函数应该使用哪一个连接。全局变量(如$conn
)在函数中不会自动可用
你有两种方法:
A:将变量作为函数参数传递:
function fetchElements($conn,$one,$two)
{
....
}
调用fetchElements($conn,$1,$2)代码>
B:使用global
关键字:
function fetchElements($one,$two)
{
global $conn;
....
}
方法A更灵活、更好(在我看来),因为例如,您可以有多个PDO连接,并且可以在每次调用的基础上决定函数应该使用哪一个连接。问题是,这样做不会再次启动新连接吗?我已经在脚本开头连接了…@Norman不会的。它只是使变量($conn
)可以在函数中访问。没有global
它超出了范围。问题是,这样做不会再次启动新连接吗?我已经在脚本开头连接了…@Norman不会的。它只是使变量($conn
)可以在函数中访问。没有global
它超出了范围。问题是,这样做不会再次启动新连接吗?我已经在脚本开头连接了…不,$conn
只是对PDO对象的引用。事实上,使用global
总是将函数内外的变量粘在一起(也就是说,在函数中更改变量,同时在函数外部更改变量)。但是,除非您特别使用clone
关键字,否则对象总是被引用的,而不是被复制的。问题是,这样做不会再次启动新连接吗?我已经在脚本开头连接了…不,$conn
只是对PDO对象的引用。事实上,使用global
总是将函数内外的变量粘在一起(也就是说,在函数中更改变量,同时在函数外部更改变量)。但是,除非您专门使用clone
关键字,否则对象总是被引用的,而不是被复制的。