변환 mysql 을 mysqli-을 얻는 방법을 자동 전역 연결하십니까?

StackOverflow https://stackoverflow.com/questions/487375

  •  20-08-2019
  •  | 
  •  

문제

내가 노력으로 변환 코드에서 mysql 을 mysqli.코드를 사용하여 단일 mysql_connect 에 파일을 포함하여 다른 모든 파일입니다.

mysql_connect 반환 MySQL 링크를 식별자는된 초광역 그래서 당신은에 의존 할 수 있는 데이터베이스 연결에서 사용할 수 있는 모든 자신의 기능입니다.

그것처럼 보이는 mysqli_connect 이지 않은 경우 객체를 반환되지 않습니다.

이 뜻은 나도 추가합니다:글로벌$mysqli;에서 최상의 모든 기능,거기에는 그것을 만드는 방법된 초광역?

도움이 되었습니까?

해결책

에 의존하는 사실 PHP 사용할 것이 마지막으로 열린 연결에 자원을 지정하지 않으면 하나는,아마도 아주 좋은 생각이 아니다.
무슨 일이 발생하는 경우 응용 프로그램 변경 사항 및야 할 두 개의 연결,또는 연결이 없을까?
그래서 그것은 보인다 당신이 할 필요가 일부 refactoring anyway.

여기에는 비슷한 솔루션을 Karsten 는 항상 반품이 동 mysqli 개체입니다.

class DB {
    private static $mysqli;
    private function __construct(){} //no instantiation

    static function cxn() {
        if( !self::$mysqli ) {
            self::$mysqli = new mysqli(...);
        }
        return self::$mysqli;
    }
}        

//use
DB::cxn()->prepare(....

다른 팁

나는 보통 기능을한다 :

$mysqli = new mysqli(...);

function prepare($query) {
  global $mysqli;
  $stmt = $msqyli->prepare($query);
  if ($mysqli->error()) {
    // do something
  }
  return $stmt;
}

function doStuff() {
  $stmt = prepare("SELECT id, name, description FROM blah");
  // and so on
}

그런 다음 전화하십시오. 즉, 나는 Mysqli를 너무 버그를 타는 것으로 버그를 썼다. 정말 수치심.

OOP를 소개하고 문제를 해결하려면 다음과 같은 클래스를 사용할 수 있습니다.

class MyDatabase
{
    private static $_connection;

    public static function connect()
    {
        $mysqli = new mysqli(...);
        self::$_connection = $mysqli;
    }

    public static function getConnection()
    {
        return self::$_connection;
    }
}

데이터베이스 연결 파일 에서이 클래스를로드하고 실행합니다. MyDatabase::connect(); 한 번. 스크립트의 어느 곳에서나 $ mysqli-connection을 얻으려면 MyDatabase::getConnection();.

이 작업을 수행하는 매우 간단한 방법은 MySQLI Connection 객체를 유지하는 것만으로 고정 된 데이터베이스 클래스를 사용하는 것입니다.

class Database {
    public static $connection;
}

Database::$connection = new mysqli(HOST, USERNAME, PASSWORD, DATABASE);

그런 다음 정상적인 방법으로 액세스 할 수 있습니다.

$sql = 'SELECT * FROM table';
$result = Database::$connection->query($sql);
$result = mysqli_query(Database::$connection, $sql);
echo 'Server info ' . mysqli_get_server_info(Database::$connection);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top