我必须多次连接到db,所以我想将db连接代码放在名为functions.php的另一个文件中
<?php
function connect_db(){
$conn = new PDO('mysql:host=localhost;dbname='dbname', 'usr', 'pass');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
?>
当我想连接我在另一个文件中插入connect_db()时,
try {
connect_db();
$stmt = $conn->prepare('SELECT * FROM 'table' WHERE url= :url');
我收到了一个错误..
致命错误:在非对象中调用成员函数prepare() /...
这是一个范围错误吧?但我听说全球化并不好。你能告诉我如何正确插入它吗?
感谢。
答案 0 :(得分:2)
你必须在函数中返回对象,否则它只是函数内部的局部变量,一旦函数结束就会被清除。
function connect_db()
{
$conn = new PDO('mysql:host=localhost;dbname=dbname', 'usr', 'pass');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $conn;
}
$conn = connect_db();
答案 1 :(得分:0)
是的,这是范围的问题 - $conn
仅在该功能中可用。你需要退货:
function connect_db(){
$conn = new PDO('mysql:host=localhost;dbname=dbname', 'usr', 'pass');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $conn;
}
然后当你调用函数时:
$conn = connect_db();
答案 2 :(得分:-1)
你可以尝试一下..
first.php
<?php
function connect_db(){
$conn = new PDO('mysql:host=localhost;dbname='dbname', 'usr', 'pass');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $con;
}
?>
second.php
<?php
include('first.php');
connect_db();
?>