首页 > 解决方案 > MySQLi 连接到数据库作为单独 PHP 文件中的自定义函数

问题描述

一段 PHP 代码存在一些问题,我正在使用它来进一步了解它。

我有以下情况:

包含数据库连接详细信息的conf.php文件

<?php
    $dbhost = "localhost";
    $dbuser = "root";
    $dbpass = "";
    $dbname = "mydatabase";
?>

functions.php文件,我(希望)在其中存储一些函数以在不同页面中重用

<?php
function dbconnect() {
    global $dbhost;
    global $dbuser;
    global $dbpass;
    global $dbname;
    $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
    if($mysqli->connect_error) {
        exit('Error connecting to database');
    }
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli->set_charset("latin1_swedish_ci");
}
?>

complete.php文件,它通过 POST 从另一个 PHP 页面接收一些数据。

<?php
    require_once( 'conf.php' );
    require_once( 'functions.php' );
?>
// some HTML code
<?php
    $mydate = date("Y-m-d H:i:s");
    dbconnect();
    $stmt = $mysqli->prepare("INSERT INTO my_table (field1, field2, field3, field4, field5, field6, field7, field8, date) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssssssss", $_POST['field1'], $_POST['field2'], $_POST['field3'], $_POST['field4'], $_POST['field5'], $_POST['field6'], $_POST['field7'], $_POST['field8'], $mydate);
    $stmt->execute();
    $stmt->close();
?>

如果我通过 POST 从我的第一页发送数据到complete.php,我会收到以下错误:

注意:未定义变量:mysqli

致命错误:未捕获的错误:在 null 上调用成员函数 prepare()

错误:在 null 上调用成员函数 prepare()

对于第一个我认为我可以通过设置摆脱

global $mysqli;

dbconnect() 之前;complete.php中。我知道这是因为函数来自不同的文件,我必须将变量设置为global。这就是我在conf.php 中将$dbhost$dbuser$ dbpass$dbname设置为 GLOBAL 的原因。如果没有将它们设置为全局,则应用程序无法找到变量。我最初认为也许我没有正确使用 require_once,也许我应该使用 require、include 或 include_once。但他们都没有任何区别。如果我错了,请纠正我。

所以在将 $mysqli 设置为全局后,第一个错误消失了,但我仍然得到其他两个错误。

如果我替换dbconnect(); complete.php

$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
    if($mysqli->connect_error) {
        exit('Error connecting to database');
    }
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli->set_charset("latin1_swedish_ci");

基本上与functions.php相同的东西减去将变量设置为全局,它工作得很好,数据被添加到数据库中。

我没有t know what I做错,也许require_once函数有些问题,因为当连接直接写入complete.php时代码工作正常,或者我m not creating the function properly. I想将准备好的db insert语句添加为functions.php中的单独函数, 只需用 add_data(); 调用它 但在这一点上,我m not even getting to the issues I将面对那里。:)

标签: phpfunctionmysqliincludeprepared-statement

解决方案


推荐阅读