燮!我们有mysql连接的核心类,而不是包含插件,我们需要插件无法访问我们的DB而没有核心类方法。
的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);
}
}
}
?>
我需要从包含的脚本中限制访问,但是可以使用核心方法进行查询。我怎么能成功呢?
答案 0 :(得分:4)
<?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();
?>
答案 1 :(得分:3)
为每个类创建在数据库上单独连接到单独的用户并在例如Plugin类中保持对此连接的处理,并使用数据库库对此句柄进行操作。我认为这是一个很好的解决方案。
当然,您要为用户设置权限。 (每个类或一组类的单独用户)
答案 2 :(得分:3)
不太确定这是否有帮助,但我通常做的是有一个用于sql连接的类,另一个用于我将操作的特定表(保存,更新,加载,删除函数)
然后在我的索引或任何页面中执行以下操作:
include_once("class/sql.php")
$db = new DB();
include_once("class/table.php")
$table = new TableClass();
$result =$db->query($table->load(parameters));
while($row = mysql_fetch_array($result))
{
return print_r($row, 1);
}
这样的事情只是简短但希望它有所帮助。