函数内部的全局数据库连接

时间:2015-03-09 19:40:58

标签: php mysql global-variables require

尝试在.php文件中的所有函数中进行全局数据库连接。

sql.php:

<?php
$servername = "XXXXX";
$username = "XXXXX";
$password = "XXXXX";
$dbname = "XXXXX";

$conn = new mysqli($servername, $username, $password, $dbname);
mysqli_set_charset($conn, "utf8");
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
?>

save.php

$conn = require_once('../path/to/sql.php');

function save()
{
    global $conn;
    $sql = "INSERT INTO `content` (title, text, cat)
VALUES ('".$_POST["title"]."', '".$_POST["text"]."', '".$_POST["category"]."')";

    if ($conn->query($sql) === TRUE) {
        show();
    }
    $conn->close();
}

我希望得到带有require_once的sql.php,然后将其设为全局,然后将其放入save()函数中。

错误是:

  

致命错误:在非对象中调用成员函数query()   第37行/homepages/3/xxxxxxxx/htdocs/xxxxxxxx/xxxxxxxx/content.php

实际上我不知道这种方式使它全局正确与否,所以请帮助我选择在函数内部建立全局数据库连接的最佳方法。

1 个答案:

答案 0 :(得分:-1)

尝试

define('DATABASE_USERNAME', 'root');
define('DATABASE_PASSWORD', 'password');
define('DATABASE_HOST', 'localhost');
define('DATABASE_DBNAME', 'db');
$conn = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_DBNAME);

命名常量非常适合静态全局数据。

你还需要做

require_once 'path/to/sql.php';

而不是

$conn = require_once 'path/to/sql.php';

$ conn已在您的require_once中设置。