喂!我们有与 mysql 连接的核心类,而不是我们包含的插件,我们需要该插件在没有核心类方法的情况下无法访问我们的数据库。
index.php
<?php
class Core
{
function connect()
{
$db = @mysql_connect($host, $user, $pass);
@mysql_select_db($base, $db);
}
function query($sql)
{
return mysql_query($sql);
}
}
global $c;
$c = new Core();
include('plugin.php');
$p = new Plugin();
echo $p->not_work_connection();
echo $p->work_connection();
?>
plugin.php
<?php
class Plugin
{
function not_work_connection()
{
$sql = 'SELECT * FROM `net_country` LIMIT 0 , 1';
$result = mysql_query($sql);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
return print_r($row, 1);
}
}
function work_connection()
{
global $c;
$result =$c->query('SELECT * FROM `net_country` LIMIT 0 , 1');
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
return print_r($row, 1);
}
}
}
?>
我需要限制对包含脚本的访问,但他们可以使用核心方法进行查询。我怎样才能做到?
最佳答案
没有第二个参数的 mysql_query 使用 mysql_connect 使用的最后一个链接,所以你可以在真实连接之后创建一个虚拟连接:
<?php
class Core
{
private $db;
function connect()
{
$this->db = @mysql_connect($host, $user, $pass);
@mysql_select_db($base, $db);
//dummy
@mysql_connect();
}
function query($sql)
{
//notice second param
return mysql_query($sql, $this->db);
}
}
global $c;
$c = new Core();
include('plugin.php');
$p = new Plugin();
echo $p->not_work_connection(); //doing a mysql_query will use the dummy resource and fail
echo $p->work_connection();
?>
关于php - 如何限制其他类访问mysql连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8858170/