在PHP中使用另一个类中的MySQLi
我真的希望有人能帮我弄清楚我错过了什么。我已经将我的安装从PHP5.6升级到7.0,这迫使我从Mysql更新到Mysqli,由于某种原因,这破坏了我的设置 我研究并遵循本指南“在其他类中使用MySQLi”: 我写这篇文章是万不得已的,也看过其他网站,但问题似乎来自其他地方 首先,我有一个数据库类:在PHP中使用另一个类中的MySQLi,php,mysql,mysqli,Php,Mysql,Mysqli,我真的希望有人能帮我弄清楚我错过了什么。我已经将我的安装从PHP5.6升级到7.0,这迫使我从Mysql更新到Mysqli,由于某种原因,这破坏了我的设置 我研究并遵循本指南“在其他类中使用MySQLi”: 我写这篇文章是万不得已的,也看过其他网站,但问题似乎来自其他地方 首先,我有一个数据库类: private $serverName = "localhost"; private $userName = "DBUserName"; private $pass = "Us
private $serverName = "localhost";
private $userName = "DBUserName";
private $pass = "UserPassword";
private $database = "SelectedDB";
public $conn;
public function __construct(){
$this->conn = new mysqli($this->serverName, $this->userName,$this->pass,$this->database);
}
然后我有一个API类,我想在其中访问这个连接
require_once 'Database.php';
class MyAPI{
private $db;
public function __construct($request_uri, $postData, $origin) {
$this->db = new Database();
}
最后,我尝试从函数调用它:
$getUserResult = mysqli_query( $this->db->conn, $getUserQry);
每当我调用$this->db->conn时,我都会收到一个内部服务器错误500
如果我在MyAPI类中创建数据库连接,就不会出现我觉得奇怪的问题
我希望有人能为我指明方向
更新:
我纠正了脚本中的一个拼写错误,现在我得到了200,但是查询mysqli_的值仍然是null
如果我创建$dbtest=newdatabase();用它来代替,效果很好。有什么方法可以让它在引用$db的构造函数中工作吗?有几种错误做法导致了这个错误 显然,从数据库扩展用户是错误的。而且,整个数据库类都是无用的,因为它没有做任何有用的事情 因此,我建议
- 去掉无用的数据库类
- 从vanilla mysqli创建一个单个$db实例
- 将其作为构造函数参数传递到每个需要数据库连接的类中
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli("localhost", "DBUserName", "UserPassword", "SelectedDB");
$db->set_charset('utf8mb4');
“500错误”意味着“PHP中出现错误”意味着“检查错误.log
文件”或服务器转储错误的任何地方代码>应该在类定义中始终在开发和测试代码时,在脚本的顶部错误报告(E_ALL);ini设置(“显示错误”,1)代码>私有$db;只是放错了地方,在PHP中是正确的@tadman我会立即检查error.log给Michael Berkowski我已经在脚本中为将来设置好了我没有在php.ini中设置place error_log,但是我现在已经创建了一个,然后我会报告回来!
<?php
class MyAPI
{
protected $db;
public function __construct($db, $request_uri, $postData, $origin)
{
$this->db = $db;
}
public function getUser($id)
{
$sql = "SELECT * FROM users where id=?";
$stmt = $this->db->prepate($sql);
$stmt->bind_param("s", $id);
$stmt->execute();
$result = $stmt->get_result();
return $result->fetch_assoc();
}
}
<?php
# require_once 'Database.php';
# require_once 'myapi.php';
require 'vendor/autoload.php'; // autoloading is a must
$api = new MyAPI($db, $request_uri, $postData, $origin);
$user = $api->getUser($_POST['id']);