Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用另一个类中的MySQLi_Php_Mysql_Mysqli - Fatal编程技术网

在PHP中使用另一个类中的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

我真的希望有人能帮我弄清楚我错过了什么。我已经将我的安装从PHP5.6升级到7.0,这迫使我从Mysql更新到Mysqli,由于某种原因,这破坏了我的设置

我研究并遵循本指南“在其他类中使用MySQLi”:

我写这篇文章是万不得已的,也看过其他网站,但问题似乎来自其他地方

首先,我有一个数据库类:

    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实例
  • 将其作为构造函数参数传递到每个需要数据库连接的类中
database.php:

<?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']);