为什么即使连接后我与数据库的连接也无法正常工作?
这是我存储连接的文件: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;
}
?>
然后是这个页面:index.php
:我在其中包含上述文件。
<?php
include_once ($_SERVER['DOCUMENT_ROOT'].'\attach\dbase.php');
$conn = connect();
$what = 1;
$stmt = $conn->prepare("select id as id, name as name, description as description, level as level from products where level = :what and country = 'US'");
$stmt->bindParam(':what', $what);
$stmt->execute();
$rows = $stmt->rowCount();
while($row = $stmt->fetch())
{
echo $row['name']." ".$row['id'];
echo "<br><br>";
fetchElements($row['level'],$row['id']);
}
function fetchElements($one,$two)
{
//This is line 25
$elements = $conn->prepare("select id as id, level as level, name as name, description as description from products where level > :what and parent = :parent and country = 'US'");
$elements->bindParam(':what', $one);
$elements->bindParam(':parent', $two);
$elements->execute();
//Sql for 3 need to be different
while($row = $elements->fetch())
{
echo $row['name']." Id: ".$row['id']." Level: ".$row['level']."<br>";
if($one != 3)
{
fetchElements($row['level'],$row['id']);
}
}
echo "<br>";
}
?>
即使我在上面的这个页面中连接到dbase,当脚本调用该函数时,我得到:Notice: Undefined variable: conn in C:\web\apache\htdocs\index.php on line 25 Fatal error: Call to a member function prepare() on a non-object in C:\web\apache\htdocs\index.php on line 25. I've marked line 25 in the file.
为什么会发生这种情况,我该如何解决?“
答案 0 :(得分:1)
更改
function fetchElements($one,$two)
{
...
到
function fetchElements($one,$two)
{
global $conn;
...
答案 1 :(得分:1)
将此$conn
作为fetchElements
函数
function fetchElements($one,$two, $conn) {
并在此处指定
fetchElements($row['level'],$row['id'], $conn);
请勿使用GLOBAL
答案 2 :(得分:1)
全局变量(如$conn
)在功能中不会自动显示。
你有两种方法:
A:将变量作为函数参数传递:
function fetchElements($conn,$one,$two)
{
....
}
使用fetchElements($conn,$one,$two);
B:使用global
关键字:
function fetchElements($one,$two)
{
global $conn;
....
}
方法 A 更灵活,更好(在我看来),因为您可以拥有多个PDO连接,并可以决定每个呼叫应使用哪个功能。