2012-01-13 3 views
4

Sup! 우리는 플러그인을 포함하는 것보다 mysql 연결을 통해 핵심 클래스를 가지며 핵심 클래스 메소드없이 플러그인에 액세스 할 필요가 없습니다.다른 클래스에서 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); 
      } 
     } 
    } 
?> 

나는 포함 스크립트에서 액세스를 제한해야하지만 어떤것 쿼리를 만드는 핵심 방법을 사용할 수 있습니다. 내가 어떻게 만들 수 있니?

답변

4

는 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(); 
?> 
+0

굉장합니다. 그것의 간단하고 효과적인. 그러나 mysql 사용자를 privelegies없이 생성하고'@mysql_connect ('localhost', 'fake', 'fake');와 연결하십시오. – Barif

3

각 클래스에 대해 데이터베이스에서 일부 작업을 수행하여 별도의 사용자에게 별도의 연결을 생성하고이 연결을 처리 (예 : 플러그인 클래스)하고 데이터베이스 라이브러리를 사용하여이 핸들을 조작하십시오. 나는 이것이 좋은 해결책이라고 생각한다.

물론 사용자에게 권한을 설정하고 있습니다. (각 클래스 또는 클래스 그룹에 대해 별도의 사용자)

+0

감사합니다. 포함 된 플러그인에 대해 "샌드 박스"와 같은 것이 필요합니다. 핵심 클래스의 API를 사용해야하고 DB에 직접 연결할 수 없습니다. – Barif

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); 
     } 

뭔가 그냥 간단한이지만 도움이 되었으면 좋겠 다음

다음 내 인덱스 또는 모든 페이지에서 내가 할) 기능을 삭제합니다. 두 번째 PARAM없이

관련 문제