1

我必须多次连接到 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()

这是一个范围错误,对吧?但我听说让它全球化并不好。你能告诉我如何正确插入吗?

谢谢。

4

3 回答 3

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();
于 2013-05-17T06:07:05.910 回答
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();
于 2013-05-17T06:07:20.810 回答
-1

喜欢的可以试试。。

第一个.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;  
   }
  ?>

第二个.php

    <?php
      include('first.php');
      connect_db();
     ?>
于 2013-05-17T06:04:25.417 回答