【问题标题】:Can't connect my MySqli to my other classes无法将我的 MySqli 连接到我的其他课程
【发布时间】:2015-03-08 19:10:56
【问题描述】:

我的连接:

  <?php
    $db = new mysqli('localhost', 'root', '', 'audiologiska_kliniken');

    if($db->connect_errno > 0){
        die('Ett fel inträffade [' . $db->connect_error . ']');
    }

我的班级:

  <?php
//Display model
require '../include/connect.php';
Class Display
{


    function getData() {
        mysql_set_charset('utf8');
        if($result =$db->query= "SELECT * FROM patient left join person on person.Personnummer = Patient.Patient";`enter code here`

问题:该类无法识别$db。这是为什么呢?

【问题讨论】:

  • 尝试在 $db 变量之前添加 global 关键字。不是最好的方法,但这是一个范围问题。我建议将connect.php代码放在一个类中,并为数据库连接创建一个静态函数,或者将它放在一个构造方法中,并使用连接类扩展显示类
  • 因为它超出范围,你可以创建一个连接类并访问它,或者在构造函数中使用它
  • 为什么不把 db 对象作为参数传递?
  • 现在可以了,谢谢 :) 我仍然无法连接。我遵循上述评论的建议并创建了一个构造函数并将 Display 类扩展到它。但我不确定如何..

标签: php mysqli require


【解决方案1】:

因为您没有将变量 $db 传递给您的函数,(它不在函数范围内)

把你的函数改成这样:

function getData($db){

你的函数调用这个:

getData($db);

这应该适合你。

【讨论】:

    【解决方案2】:

    这个问题是因为变量的范围:你不能从函数内部的全局数据中看到变量。您可以修改您的函数 getData():

    function getData() {
        global $db;
        mysql_set_charset('utf8');
        if($result =$db->query= "SELECT * FROM patient left join person on person.Personnummer = Patient.Patient";`enter code here`
    

    但这种方法并不是“最好的”。更好的方法 - 为您的班级添加连接,即:

    require '../include/connect.php';
    Display::$connection = $db;
    Class Display
    {
    static $connection;
    function getData() {
        mysql_set_charset('utf8');
        if($result =self::$connection->query= "SELECT * FROM patient left join person on person.Personnummer = Patient.Patient";`enter code here`
    

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2018-08-03
      • 2015-04-10
      • 2020-02-25
      • 2019-03-10
      • 2020-10-10
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多