mysql connect handle 가져오는 방법??
안녕하세요~~~
문의 좀 드립니다.
제가 C로 PHP EXTENSION을 개발하여 PHP의 내부 함수를 만들었습니다.
그 PHP프로그램은 편의상 이름을 ext.php라고 하겠습니다.
그리고 ext.php에서는 제가 EXTENSION으로 개발한 ext_mysql(); 함수를 사용합니다.
이때 ext.php에서 mysql_connect(서버IP, 유저, 패스워드);로 먼저 접속을 합니다.
그리고 나서 ext_mysql();함수를 호출합니다.
----------------------------------------
<?
//program name : ext.php
$link = mysql_connect(서버ip, 유저, 비번);
~~
~~
ext_mysql(); // c로 구현한 php extension 함수
?>
-------------------------------------------
ext_mysql()함수는 C로 구현 했는데, 그 함수안에서 mysql 접속정보 확인이 필요하여
select user();를 query를 하거나 mysql_list_processes(link);를 합니다.
그런데 이걸 하려면 MYSQL C API는 mysql_real_connect(link, ...);로 재접속을 해야합니다.
그리니까 ext.php에서 mysql_thread_id()로 얻은 thread id와
ext_mysql()에서 thread id가 달라집니다. 재접속을 했으니 어쩌면 당연하겠지요...
하지만 PHP에서 $link=mysql_connect(arg..)는 한번 접속하면 밑에서
또 $link= mysql_connect(arg..)해도
동일 arg면 접속을 새로 하지 않고 $link(MYSQL connect handle)만 재반납합니다.
thread id도 당연 같겠죠...
제가 알고 싶은 것은 첫째, ext_mysql()에서 MYSQL C API를 사용할 때도 PHP의 $link=mysql_connect(arg ..);처럼 새로 재접속 하지 않고도 query를 할 수 있는 방법이 있는지?
둘째, MYSQL C API(ext_mysql())사용에서 PHP(ext.php)에서 connect한 $link를 가져오는 방법이
있는지?를 알고 싶습니다. MYSQL C API함수는 거의 모든 함수들이 $link를 함수 인자로 사용하기
때문에 새로 재접속을 하지 않을 수가 없네요ㅠㅠ.(예: mysql_query($link,$qy))
고수님들의 도움을 바랍니다.
mysql extention에서
mysql extention에서 mysql_query가 어떻게 mysql handle을 처리하는지를 살펴 보시면 될 것 같은데요.
일단 ext_mysql() 에서 mysql handle을 resource type으로 받고, 내부에서 resource의 db connection handle을 꺼내서 사용하시면 되는데, 이 예제는 mysql_query의 코드를 참조 하시면 될 것 같습니다. 다만 요즘 버전에서는 mysql extension 보다는 mysqli를 더 많이 사용하니, 내부적으로 둘다 지원할 수도 있게 할 수있겠죠.
감사합니다.관련 질문드리께요...ㅎ
mysql c api 매뉴얼을 쭉 보긴 했습니다.물론 제가 이해도가 낮긴 합니다.ㅎ
그런데 mysql handle을 가져오는 게 않보이더군요.그리고 mysql_real_connect를 다시 하면
새로운 connection이 이뤄지고 thread id도 달라지고 mysql handle도 달라집니다.
결국 ext.php의 접속세션과 그 안에서 호출하긴 했지만 ext_mysql()의 접속이 달라져 버린다는...
"내부에서 resource의 db connection handle을 꺼내서 사용하시면 되는데"라는 말씀이
잘 이해가 잘 않되네요.
mysql_query($link,$query)는 이런식으로 사용하니깐
새로 재접속(link = mysql_real_connect())해서 $link를 넘겨주지 않으면
실행하지 않는 구조더라구요. PHP함수랑은 사용법이 다릅니다.ㅠㅠ
mysql c api를 보라는 것이 아니라,
mysql c api를 보라는 것이 아니라, mysql extension 에서 mysql_query function의 코드를 보라는 의미입니다. 그러면 resource를 어떻게 받아오고, 받은 resource에서 어떻게 mysql handle을 사용하는지가 있다는 의미입니다.
댓글 달기