mysql connect handle 가져오는 방법??

saehymkldp의 이미지

안녕하세요~~~

문의 좀 드립니다.

제가 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_query가 어떻게 mysql handle을 처리하는지를 살펴 보시면 될 것 같은데요.

일단 ext_mysql() 에서 mysql handle을 resource type으로 받고, 내부에서 resource의 db connection handle을 꺼내서 사용하시면 되는데, 이 예제는 mysql_query의 코드를 참조 하시면 될 것 같습니다. 다만 요즘 버전에서는 mysql extension 보다는 mysqli를 더 많이 사용하니, 내부적으로 둘다 지원할 수도 있게 할 수있겠죠.

saehymkldp의 이미지

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 extension 에서 mysql_query function의 코드를 보라는 의미입니다. 그러면 resource를 어떻게 받아오고, 받은 resource에서 어떻게 mysql handle을 사용하는지가 있다는 의미입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.