php - 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
将面对那里。:)
解决方案
推荐阅读
- google-apps-script - 什么公式可以在 Google 表格中用于将数据从一个单元格拆分和提取到多个单元格?
- node.js - 请求模块返回 unicode 字符
- sql - 查找字符串中文本的行和位置
- html - 是否可以在非视频标签中播放视频,如果可以,您是如何做到的?
- android - 错误:“代码:12500,消息:12500:”发布后但不在调试中
- python-3.x - 无法打开“_io.TextIOWrapper”ob
- javascript - 如何修改我的脚本以循环多个日历而不是一个
- database - 图像数据库架构
- hotspot - 如何使用 mikrotik API 检索 mikrotik PPPoE 服务器服务名称列表?
- python - 使用 Selenium WebDriver 检索 HTML div 的值