从MySQL更改为MySQLi。选择类中的内部函数不起作用

时间:2015-10-12 14:40:02

标签: php mysql mysqli

这是一个简单的问题但由于某些原因我没有看到它。 我正在将一段代码从MySQL更改为MySQLi。问题是什么时候 我使用新的MySQLi代码,选择不起作用。

我正在展示三段代码。 1- Index.php文件,包括代码 2. Connect.php文件显示我如何连接到数据库 3. Redirect.php类代码使用失败的函数。

在底部的Redirect.php中,我已经包含了可行的OLD代码 和新的代码不起作用。我所看到的不同之处在于新的 代码使用$ con与数据库进行通信,我尝试了全局$ con和 它也失败了。拜托我需要你的帮忙。你能告诉我我做错了吗? 感谢。

<?php 
/*******************************/
/*  HERE IS THE INDEX.PHP FILE */
/*******************************/
session_start();
    include("connection.php");
    include("redirect.php");
    $log=new redirect();
    $log->check_logged();               
    $theme=$log->get_theme();
    echo 'This is the Website Theme: ' . $theme . '<br>';
    exit;
?>

<?php 
/**************************************************/
/* HERE IS THE CONNECTION.PHP CODE BEING INCLUDED */
/**************************************************/
$con = mysqli_init( );
if (!$con)
    {
        die("ERROR: MySQLi Initialed failed");
    }

if (!mysqli_real_connect($con, SERVERNAME,USERNAME,PASSWORD,DATABASENAME, NULL, NULL, MYSQL_CLIENT_INTERACTIVE))
    {
        die("MySQLi Real Connect Error: " . mysqli_connect_error());
    }
?>

<?php 
/**************************************************/
/* HERE IS THE REDIRECT.PHP CODE BEING INCLUDED */
/**************************************************/
class redirect
{
    function __construct()
    {   }

    function check_logged()
    {
        if(isset($_SESSION['member_id']) && $_SESSION['member_id']!="")
        {
            if(isset($_GET['loginad']) && $_GET['loginad']==1)
                header('location:'.SITEADDRESS_MEMBER.'memberoverview.php?loginad=1');
            if(isset($_GET['surfad']) && $_GET['surfad']==1)
                header('location:'.SITEADDRESS_MEMBER.'memberoverview.php?surfad=1');   
            else
                header('location:'.SITEADDRESS_MEMBER.'memberoverview.php');
        }
    }

    function get_theme()
    {
        /************************************************/
        /* HERE IS THE OLD REDIRECT.PHP CODE THAT WORKS */
        /************************************************/
        $result = mysql_query("select * from theme where status='yes'");
        if(mysql_num_rows($result)>0)
        {
            $data=mysql_fetch_array($result);
            return $data['theme_name'];
        }


        /********************************************************************/
        /* HERE IS THE NEW REDIRECT.PHP CODE BEING TESTED THAT DOESN'T WORK */
        /********************************************************************/
        $result = mysqli_query($con, "select * from theme where status='yes'")
        if(mysqli_num_rows($result)>0)
        {
            $data=mysqli_fetch_array($result, MYSQLI_ASSOC);
            return $data['theme_name'];
        }
    }
}
?>

2 个答案:

答案 0 :(得分:0)

还有其他方法,但主要问题是$con在课堂上不可用。您可以传入构造函数,设置它并在类中使用$this->con

include("connection.php"); // $con is defined here
$log = new redirect($con); // pass it to __construct()

class redirect
{
    public $con;

    function __construct($con) // accept it here
    {
        $this->con = $con;     // set it here
    }

    function get_theme()
    {
        // use it here
        $result = mysqli_query($this->con, "select * from theme where status='yes'");
    }
}

答案 1 :(得分:-1)

您可以使用单身人士只拥有一个连接,并在需要时轻松访问:

class connection{

    private $con = null;

    public static function getCon()
    {
        if(null === $this->con)
        {

            $con = mysqli_init( );
            if (!$con)
            {
                die("ERROR: MySQLi Initialed failed");
            }

            if (!mysqli_real_connect($con, SERVERNAME,USERNAME,PASSWORD,DATABASENAME, NULL, NULL, MYSQL_CLIENT_INTERACTIVE))
            {
                die("MySQLi Real Connect Error: " . mysqli_connect_error());
            }

            $this->con = $con;
        }

        return $this->con;
    }
}

然后在需要时调用它

function get_theme()
{
    /********************************************************************/
    /* HERE IS THE NEW REDIRECT.PHP CODE BEING TESTED THAT DOESN'T WORK */
    /********************************************************************/
    $result = mysqli_query(connection::getCon(), "select * from theme where status='yes'")
    if(mysqli_num_rows($result)>0)
    {
        $data=mysqli_fetch_array($result, MYSQLI_ASSOC);
        return $data['theme_name'];
    }
}

有关信息,您可以在POO模式下使用mysqli。 我推荐它因为你可以直接返回mysqli对象,而不仅仅是$con