这是一个简单的问题但由于某些原因我没有看到它。 我正在将一段代码从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'];
}
}
}
?>
答案 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