亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

關(guān)于嘗試開發(fā)PHP的MYSQL擴展的使用

2020-01-26 16:19:21
字體:
供稿:網(wǎng)友

一、前期準(zhǔn)備
開發(fā)MYSQL擴展,當(dāng)然得先安裝MYSQL
下載mysql-essential-5.1.65-win32

必須選上紅色的選項,因為開發(fā)MYSQL擴展時,需要頭文件和mysql的動態(tài)庫。否則擴展無法編譯成功。

這個擴展的目的主要是熟悉ZEND API,并且理解如何提供PHP API。
實現(xiàn)的PHP API有:
PHP_FUNCTION(my_mysql_connect);
PHP_FUNCTION(my_mysql_close);
PHP_FUNCTION(my_mysql_get_conn);//通過鏈接池獲取mysql資源,這個連接池只是簡單的自動擴容,并沒有收縮。
PHP_FUNCTION(my_mysql_select_db);//切換數(shù)據(jù)庫
PHP_FUNCTION(my_mysql_ping);
PHP_FUNCTION(my_mysql_query);//執(zhí)行sql,可以是SELECT或INSERT、UPDATE、DELETE等有返回值與無返回值的查詢語句
PHP_FUNCTION(my_mysql_fetch_assoc);//獲取返回結(jié)果集
PHP_FUNCTION(my_mysql_get_insert_id);//獲取上一次執(zhí)行INSERT的自增ID

二、開發(fā)思路
1.通過ext_skel_win32.php(骨架工具)創(chuàng)建my_mysql擴展。
2.使用VS2008打開my_myqsl.dsp,編輯項目屬性。
     2.1 切換為Release版本,默認(rèn)是DEBUG版本
     2.2 右鍵項目屬性-》通配屬性-》C/C++-》預(yù)處理器-》預(yù)處理器定義除去其中的ZTS=1,因為我們將編譯為NTS版本。(非線程安全)
     2.3 右鍵項目屬性-》通配屬性-》C/C++-》常規(guī)-》附加包含目錄,新增MYSQL_ROOT/include。引入頭文件搜索路徑。
          這樣當(dāng)使用#include "mysql.h"時,就不會出現(xiàn)搜索不到頭文件的錯誤
     2.4 右鍵項目屬性-》通配屬性-》鏈接器-》常規(guī)-》附加庫目錄,新增MYSQL_ROOT/lib/opt,編譯擴展時需要鏈接的DLL都在其中。(另外不要忘記引入php5nts.lib的路徑,這是任一擴展編譯時都需要引入的)
     2.5 右鍵項目屬性-》通配屬性-》鏈接器-》輸入-》附加依賴項新增libmySQL.lib,意在編譯時設(shè)定需要鏈接的DLL。
3.新建my_mysql新的PHP資源類型。
4.實現(xiàn)PHP API,供給PHP接口使用。
5.編譯擴展,拷貝生成的php_my_mysql.dll到PHP_ROOT/ext下,并修改php.ini,增加extension=ext/php_my_mysql.dll。
6.編寫PHP文件,調(diào)用擴展中提供的函數(shù)并調(diào)試。

@MYSQL_ROOT:表示mysql的安裝路徑
@PHP_ROOT:表示php所在路徑

三、開始編碼
ext/my_mysql/php_my_mysql.h

復(fù)制代碼 代碼如下:

/*
  +----------------------------------------------------------------------+
  | PHP Version 5                                                        |
  +----------------------------------------------------------------------+
  | Copyright (c) 1997-2012 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author:                                                              |
  +----------------------------------------------------------------------+
*/

/* $Id$ */

#ifndef PHP_MY_MYSQL_H
#define PHP_MY_MYSQL_H

extern zend_module_entry my_mysql_module_entry;
#define phpext_my_mysql_ptr &my_mysql_module_entry

#ifdef PHP_WIN32
# define PHP_MY_MYSQL_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_MY_MYSQL_API __attribute__ ((visibility("default")))
#else
# define PHP_MY_MYSQL_API
#endif

#ifdef ZTS
#include "TSRM.h"
#endif

PHP_MINIT_FUNCTION(my_mysql);
PHP_MSHUTDOWN_FUNCTION(my_mysql);
PHP_RINIT_FUNCTION(my_mysql);
PHP_RSHUTDOWN_FUNCTION(my_mysql);
PHP_MINFO_FUNCTION(my_mysql);

PHP_FUNCTION(my_mysql_connect);
PHP_FUNCTION(my_mysql_close);

PHP_FUNCTION(my_mysql_get_conn);
PHP_FUNCTION(my_mysql_select_db);
PHP_FUNCTION(my_mysql_ping);
PHP_FUNCTION(my_mysql_query);
PHP_FUNCTION(my_mysql_fetch_assoc);
PHP_FUNCTION(my_mysql_get_insert_id);

/*
   Declare any global variables you may need between the BEGIN
 and END macros here:    
*/
ZEND_BEGIN_MODULE_GLOBALS(my_mysql)
 long  max_connection;
  long  default_connection;
 char *driver_name;

  char *host;
  char *pwd;
  char *user;
  long port;
ZEND_END_MODULE_GLOBALS(my_mysql)


/* In every utility function you add that needs to use variables
   in php_my_mysql_globals, call TSRMLS_FETCH(); after declaring other
   variables used by that function, or better yet, pass in TSRMLS_CC
   after the last function argument and declare your utility function
   with TSRMLS_DC after the last declared argument.  Always refer to
   the globals in your function as MY_MYSQL_G(variable).  You are
   encouraged to rename these macros something shorter, see
   examples in any other php module directory.
*/

#ifdef ZTS
#define MY_MYSQL_G(v) TSRMG(my_mysql_globals_id, zend_my_mysql_globals *, v)
#else
#define MY_MYSQL_G(v) (my_mysql_globals.v)
#endif

#endif /* PHP_MY_MYSQL_H */


接口測試test.php
復(fù)制代碼 代碼如下:

<?php

// $mysql = my_mysql_connect("localhost", "root", "", "test", 3306);
// var_dump($mysql);
// // my_mysql_close($mysql);

// sleep(10);
$conn = array();
$conn[] = my_mysql_get_conn();
$conn[] = my_mysql_get_conn();
// $conn[] = my_mysql_get_conn();
// $conn[] = my_mysql_get_conn();
// $conn[] = my_mysql_get_conn();

// $conn[] = my_mysql_get_conn();
// $conn[] = my_mysql_get_conn();
// $conn[] = my_mysql_get_conn();
// $conn[] = my_mysql_get_conn();
// $conn[] = my_mysql_get_conn();

// $conn[] = my_mysql_get_conn();
// $conn[] = my_mysql_get_conn();
// print_r($conn);

var_dump($conn[0]);

// my_mysql_select_db($conn[0], "test");

// mysql_query("show processlist", $conn[0]);
// print_r($status);

// sleep(1);

my_mysql_select_db($conn[0], "mysql");

// sleep(1);

my_mysql_select_db($conn[1], "test");

my_mysql_ping($conn[1]);

$result = my_mysql_query($conn[1], "select * from test");

var_dump($result);

$arr = my_mysql_fetch_assoc($result);

my_mysql_query($conn[1], "INSERT INTO test VALUES(id, 'abc')");

$insert_id = my_mysql_get_insert_id($conn[1]);

print_r($arr);

echo $insert_id;


測試結(jié)果:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

成年人小视频在线观看| 亚洲五码在线观看视频| 久久久久久久久久97| 国产视色精品亚洲一区二区| 欧美视频日韩视频| 成人一区二区三区视频| a v视频在线观看| 91麻豆精品在线观看| gv天堂gv无码男同在线观看| 久久久久久久久久影视| 亚洲天堂网站在线观看视频| brazzers欧美精品| 伊人久久大香线蕉| 中文字幕网站在线观看| 亚洲福利在线看| 国产剧情在线观看一区二区| 能看毛片的网站| 91亚洲国产高清| 久久9999久久免费精品国产| 97婷婷涩涩精品一区| 亚洲免费国产视频| 国产在线视频2019最新视频| 亚洲一区二区天堂| 在线播放一区二区三区| 欧美12av| 国产做受高潮漫动| 久久久精品2019中文字幕之3| 国产日韩精品中文字无码| 我和岳m愉情xxxⅹ视频| 日韩欧美视频在线| 久久综合色鬼综合色| 国产色无码精品视频国产| 国产精品国产对白熟妇| 国产高清av片| 激情综合网婷婷| 日韩欧美美女在线观看| 欧美乱大交xxxxx潮喷l头像| 国产精品国模在线| 一夜七次郎国产精品亚洲| 亚洲av无日韩毛片久久| 日本午夜精品视频在线观看| 国产图片一区| 国产日韩欧美一区二区三区乱码| 在线日韩日本国产亚洲| 人人妻人人澡人人爽人人精品| 日韩中文字幕高清在线观看| 日韩视频精品| 91大神xh98hx在线播放| 中国字幕a在线看韩国电影| 欧美视频三区在线播放| 亚洲国产成人精品激情在线| 国产精品久久久久久久久久久久午夜片| 狠狠躁天天躁日日躁欧美| 国产在线观看网站| 亚洲高清av一区二区三区| 国产高潮呻吟久久久| 中文字幕免费不卡| 一本一本久久a久久精品综合小说| 成人午夜国产福到在线| 中文字幕电影在线| 暧暧视频免费| 影音国产精品| 亚洲精品一区二区三区不| 日本无删减在线| 成人免费观看毛片| 精品在线一区| 先锋资源一区二区| 国产精品私拍pans大尺度在线| 国语自产精品视频在线看抢先版图片| 国产欧美日韩中文久久| 欧美成人h版| 国产免费的av| 亚洲电影一区二区| 久久久精品国产**网站| 欧美日韩精品系列| 九九热视频免费观看| 日本道色综合久久| 欧美激情免费| 成人毛片视频在线观看| 久久久久久久亚洲精品| 欧美日韩免费观看一区=区三区| 日韩午夜激情| 99久久久无码国产精品不卡| 国产 欧美 自拍| 亚洲成人黄色网址| 亚洲午夜久久久久久久久红桃| 欧美三级美国一级| 日本高清在线观看wwwww色| 成人精品一区二区三区四区| 蜜臀av午夜一区二区三区| 操喷在线视频| 亚洲蜜臀av乱码久久精品蜜桃| 在线观看你懂的视频| 青青草免费观看完整版高清| 国产精品zjzjzj在线观看| 成人黄色图片网站| 国内外成人免费激情在线视频| av一本久道久久综合久久鬼色| 成人高清免费观看mv| 欧美乱强性伦xxxxx| 国产精品6699| 成人免费视频免费观看| 91免费版视频| 亚洲资源网你懂的| 男人的天堂狠狠干| 浮力影院网站午夜| 黑人粗进入欧美aaaaa| 欧日韩不卡在线视频| av国产在线观看| 国产一区91精品张津瑜| 精品一区二区三区视频在线播放| 中文字幕中文字幕在线中一区高清| 国产一区二区三区福利| 一区二区三区视频在线观看免费| 天天色天天操天天| 国内精品久久久久久影院8f| 91成人在线免费观看| 草莓视频成人appios| 欧美激情视频一区二区三区免费| 欧美专区中文字幕| 七七久久电影网| 99久久久国产精品免费调教网站| 六月丁香婷婷激情| 亚洲三区视频| 午夜黄色福利视频| 国产在线天堂www网在线观看| 色哟哟网站入口亚洲精品| 国产精品腿扒开做爽爽爽挤奶网站| 欧美被狂躁喷白浆精品| 日韩视频欧美视频| 国产黄视频在线| 免费看一区二区三区| www久久精品| 国产chinasex对白videos麻豆| 中文字幕一区二区人妻电影| 天天干,天天干| 香港三级韩国三级日本三级| 天堂在线视频观看| 国产视频一区二区三区在线观看| 国产精品嫩草影院av蜜臀| 毛片免费在线| 91麻豆精品国产自产在线观看一区| 亚洲高潮女人毛茸茸| 高h调教冰块play男男双性文| 在线免费日韩av| 超碰中文字幕在线观看| 日韩av在线一区二区| 日韩一区二区久久久| 一级黄色免费片| 国产麻豆成人精品| 搞av.com| 少妇久久久久久被弄高潮| 久久国产精品网站| 欧美a视频在线观看| 中文写幕一区二区三区免费观成熟| 日本一区午夜艳熟免费| 久久精品在线观看视频| 日韩中文字幕一区二区高清99| 麻豆传媒网站在线观看| 在线一区二区观看| 日韩精品人妻中文字幕有码| 国产成人免费9x9x人网站视频| 国产精品久久免费| 五月激情婷婷在线| 色美美综合视频| 深夜福利在线视频| 精品人妻无码一区二区性色| 3d动漫精品啪啪一区二区下载| 蜜臀av亚洲一区中文字幕| 精品一区二三区| 亚洲一区二区伦理| 国产高清自拍99| 毛片视频网站在线观看| www.91popny.com| 欧美日韩一区二区区别是什么| 可以免费观看av的网站| 1769视频在线播放免费观看| 91精品福利观看| 激情成人午夜视频| 国产玖玖精品视频| 中文字幕欧美国内| 中文字幕中文字幕在线中心一区| 老司机精品视频导航| 亚洲天堂国产视频| 久久久久久亚洲综合影院红桃| 网友自拍区视频精品| 久久久久久久影院| 超碰在线图片| 乐播av一区二区三区| 四虎4545www国产精品| 精品国产乱码久久久久久1区2区| 欧美精品日日鲁夜夜添| 欧洲美女女同性互添| 黄色片视频网站| 久久这里只有精品9| 六月丁香色婷婷| 老子影院午夜伦不卡大全| 亚洲女同女同女同女同女同69| 一个人免费播放在线视频看片| 久久91精品国产91久久久| 国产精品不卡一区| 拔插拔插海外华人免费| 一二三区在线视频| 日韩欧美亚洲日产国| 亚洲资源网你懂的| 日韩黄色视屏| 日本午夜在线亚洲.国产| 无遮挡的视频在线观看| 国产美女av| 一本久久青青| 欧美日韩综合高清一区二区| 手机在线中文字幕| 最近最新mv在线观看免费高清| 国产成人一区二区三区免费看| 肥臀熟女一区二区三区| 深夜福利视频一区二区| 亚洲激情一区二区| 国产精品免费观看高清| 久久夜色精品亚洲| 欧美成人全部免费| 欧美喷潮久久久xxxxx| 99精品国产高清一区二区| 精品一二三四在线| 久久久久国产精品一区三寸| 国产专区第一页| 欧美不卡视频一区发布| 亚洲另类欧美日韩| 日本一区二区黄色| 久久久久久高清| 日韩中文欧美在线| 国产91在线免费| 91精品国产亚洲| 欧美二区在线观看| 日本免费看黄色| 922tv免费观看在线| 精品福利在线导航| 国产一区二区免费| 日本国产一区二区| 日本不卡1区2区3区| 欧美美女视频| 欧洲一区在线电影| 中文字幕成人动漫| 亚洲大胆精品| 亚洲成a人片77777老司机| 中文字幕在线国产| 国产精品视频一区二区高潮| 日韩亚洲欧美高清| 亚洲男人的天堂一区二区| av无码av天天av天天爽| 黄网在线观看| 国产a国产a国产a| 欧美日韩精品免费观看视欧美高清免费大片| 视频三区在线观看| 韩国主播福利视频一区二区三区| 丰满女人性猛交| 福利片一区二区三区| 欧美一区二区在线免费播放| 亚洲精品欧美日韩专区| 大白屁股一区二区视频| 欧美一级精品大片| 欧美91在线|欧美| 亚洲一区二区五区| 先锋影音男人资源网| 国产亚洲女人久久久久毛片| 欧美亚洲日本国产| av成人免费在线观看| 91免费视频网站| 欧美激情成人动漫| 欧美一区二区三区| 影音先锋一区| 欧美一级免费| 熟妇人妻久久中文字幕| 亚欧视频在线观看| 亚洲天堂av资源在线观看| 精品视频全国免费看| 欧美高清性hdvideosex| 伊人中文字幕在线| 中文有码在线| 丁香五月缴情综合网| 日本久久久网站| 午夜精品在线视频一区| 欧美第一页在线| 一区二区在线免费观看视频| 91九色在线porn| 日韩亚洲精品在线观看| 日本不卡视频一二三区| 黄色欧美视频| 国产精品亚洲电影久久成人影院| 亚洲精一区二区三区| 狠狠人妻久久久久久| 国产精欧美一区二区三区| 国产精品国产三级国产专区53| 最新中文字幕免费视频| 欧美国产日韩在线| 一卡二卡三卡日韩欧美| 中文字幕免费在线观看视频一区| 欧美日韩在线播放三区四区| 九色国产蝌蚪| 亚洲欧美日本国产专区一区| 99久久99久久精品免费| 少妇人妻丰满做爰xxx| 欧美日韩国产精品一区二区三区四区| 国产suv精品一区二区| 日韩精品一区二区不卡| 中文字幕在线中文字幕日亚韩一区| 久久91在线| 97一区二区国产好的精华液| 国产三级免费观看| 美女免费视频黄| 亚洲日穴在线视频| 日韩免费视频一区| 国产精品免费久久| 日本韩国欧美超级黄在线观看| 天天影视欧美综合在线观看| 国产69精品久久久久9999小说| 九色porny丨精品自拍视频| 青柠在线免费观看| 欧美xxxx中国| 青柠在线免费观看| 日韩一级片av| 国产亚洲精久久久久久| 免费欧美一级视频| 91浏览器在线视频| 成人综合一区| 久久久亚洲欧洲日产| 中文字幕免费中文| 欧美电影院免费观看| 日韩视频二区|