이 섹션은 PHP와 데이터베이스의 연동에 관련되어 자주 묻는 질문들을 다룹니다. 네, PHP는 오늘날 거의 모든 데이터베이스와 연동이 가능합니다.
윈도우 머신상에서, 인클루드 ODBC 지원(included ODBC support)과 ODBC 드라이버(correct ODBC driver)를 사용할수 있습니다.
유닉스 머신에서, 사이베이스-CT(Sybase-CT)드라이버를 사용할수있습니다. 왜냐하면 둘은 프로토콜이 호환되기 때문입니다. 사이베이스는 » 리눅스 시스템에 필요한 무료버전 을 만들었습니다. 다른 유닉스 운영체제에서는 적합 라이브러리(correct library) 로 사이베이스와 연동해야 합니다. 또한 다음 FAQ를 보세요.
네, 윈도우 9x/Me나 NT/2000 상에서 운영하고 있다면 그리고 그 운영체제에서 ODBC를 사용할수 있고 MS 액세스 데이터베이스를 위한 ODBC 드라이버를 사용할수 있다면 필요한 모든 툴은 이미 보유한 것입니다.
유닉스에서 PHP를 사용하고 있고 윈도우 박스의 MS 액세스와 연동하기를 원한다면 유닉스 ODBC 드라이버가 필요합니다. » OpenLink Software에 이를 수행할수 있는 유닉스 기반 ODBC 드라이버가 있습니다.
다른 방법은 윈도우 ODBC 드라이버까지 포함되있고 데이터도 저장할수 있는 SQL 서버를 사용하는것입니다. 그 데이터는 MS 액세스에서 접근할수 있고(ODBC로), PHP로(내장 드라이버)로 접근할수 있습니다. 또는 액세스와 PHP 모두에게 가용한 파일 형식을 이용하는것입니다. 즉 일반 파일(flat files)이나 dBase 형식으로요. 이에 관련된 글을 OpenLink software의 Tim Hayes가 쓴글을 참고하세요:
PHP에서 직접 ODBC를 사용하여 데이터베이스에 접근 할 수 있을 경우 - 즉, OpenLink의 드라이버를 사용할 경우 중간 단계로 다른 데이터베이스를 사용하는 것은 좋은 생각이 아닙니다. 중간 파일 형식을 사용해야 한다면, OpenLink에서 Virtuoso(가상 데이터베이스 엔진)를 NT, 리눅스, 기타 유닉스 플랫폼에 릴리즈했습니다. » 웹 사이트에서 무료로 내려받을 수 있습니다.
다른 방법은 MySQL을 사용하고, 윈도우상에서 MyODBC드라이버를 사용하여 데이터베이스를 동기화하는 것입니다. Steve Lawrence의 글을 참고하세요:
팁과 트릭:
There are three MySQL extensions, as described under the Choosing a MySQL API section. The old API should not be used, and one day it will be deprecated and eventually removed from PHP. It is a popular extension so this will be a slow process, but you are strongly encouraged to write all new code with either mysqli or PDO_MySQL.
Migration scripts are not available at this time, although the mysqli API contains both a procedural and OOP API, with the procedural version being similar to ext/mysql.
It is not possible to mix the extensions. So, for example, passing a mysqli connection to PDO_MySQL or ext/mysql will not work.
네, PHP에서는 앞으로도 계속 MySQL지원이 될것입니다. PHP 5의 단 하나의 변화가 클라이언트 라이브러리 자체를 함께 제공하지 않는다는 것입니다. 그 이유는 특별한 순서없이 아래글에서 설명하도록 하겠습니다:
요근래의 대부분의 시스템은 이미 클라이언트 라이브러리가 설치되어있습니다.
위에서 언급한대로, 라이브러리를 여러가지 버전을 갖게 되면 혼란스러워질수 있습니다. 예를 들면 어떤 버전은 mod_auth_mysql을 링크하고 다른 버전에는 PHP를 링크하고나서 아파치안에서 두개 버전을 모두 활성화시키면, 큰 충돌이 발생하게 됩니다. 또한, 함께 제공된 라이브러리가 설치된 서버버전과 항상 잘 작동하지도 않습니다. 이런 경우를 잘 보여주는 예가 mysql.socket 유닉스 도메인 소켓 파일이 있는 곳을 찾을수 없을때입니다.
유지관리가 약간 더디게 되고 최신판 버전에 점점더 뒤떨어지게 될것입니다.
앞으로의 라이브러리 버전은 GPL을 따르고 따라서 우리가 BSD/아파치 스타일의 라이센스 프로젝트인 GPL의 라이브러리를 함께 제공할수 없기 때문에 업그레이드 경로를 갖을수 없습니다. PHP 5에서 이런 깨끗한 중단이 최고의 선택으로 보입니다.
이와 같은 사실은 실제로 많은 사람들에게 영향이 있지는 않을것입니다. 유닉스 사용자, 최소한 그들이 무엇을 하는지 아는 사용자는 PHP를 빌드할 때 항상 --with-mysql=/usr 옵션을 추가하여 시스템의 libmysqlclient 라이브러리로 PHP를 빌드했습니다. 윈도우 사용자는 php.ini에서 php_mysql.dll 확장을 활성화할 수 있습니다. 자세한 설치 안내는 MySQL 레퍼런스를 참고하십시오. 또한, libmysql.dll이 시스템 PATH에 들어있는지 확인하십시오. 이를 하는 방법은 윈도우 시스템 PATH 설정하기 FAQ를 읽어보십시오. libmysql.dll(과 많은 PHP 관련 파일들)은 PHP 폴더에 존재하므로, PHP 폴더를 시스템 PATH에 추가할 수 있습니다.
0으로 되어있는 결과 식별자(result identifier)를 사용하려 하고 있습니다. 0이라는것은 어떤 이유로 질의가 실패했다는것을 말합니다. 질의를 보내고 돌아온 결과 식별자를 사용하기 전에 에러를 점검할 필요가 있습니다. 다음과 비슷한 방법이면 됩니다.
<?php
$result = mysql_query("SELECT * FROM tables_priv");
if (!$result) {
echo mysql_error();
exit;
}
?>
<?php
$result = mysql_query("SELECT * FROM tables_priv")
or die("Bad query: " . mysql_error());
?>