日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

Delphi直連MySQL:libmysql.dll原生調(diào)用實(shí)戰(zhàn)指南

Delphi直連MySQL:libmysql.dll原生調(diào)用實(shí)戰(zhàn)指南 簡介本資源是面向Delphi中高級(jí)開發(fā)者的技術(shù)實(shí)踐包聚焦于繞過OLE DB、直接調(diào)用MySQL原生客戶端庫mysql.dll實(shí)現(xiàn)數(shù)據(jù)庫連接與操作的核心方案。適用于需提升數(shù)據(jù)庫訪問性能、規(guī)避Windows平臺(tái)中間層依賴、或定制輕量級(jí)數(shù)據(jù)訪問層的桌面應(yīng)用開發(fā)場景。壓縮包共53個(gè)文件含6個(gè)關(guān)鍵Pas單元如mysql.pas封裝DLL接口、4個(gè)DPR主程序覆蓋不同Delphi版本、4個(gè)DFM界面文件、32個(gè)HTML字符集文檔詳述cp1251、latin1、utf8等編碼適配方案以及ThreadDemo多線程安全示例和StmtDemo預(yù)編譯語句實(shí)踐整體僅87KB結(jié)構(gòu)緊湊、即拿即用。已有432人學(xué)習(xí)下載讀者可直接獲取完整可運(yùn)行的Delphi工程、跨編碼環(huán)境的字符集處理范例、線程安全連接管理邏輯以及mysql_win32.inc等平臺(tái)適配頭文件快速掌握原生API集成要點(diǎn)與典型錯(cuò)誤規(guī)避方法。1. Delphi 直連 MySQL繞過 OLE DB 的mysql.dll原生調(diào)用方案為什么老項(xiàng)目還在用它你手頭有個(gè)運(yùn)行十年的 Delphi 7 工業(yè)監(jiān)控系統(tǒng)數(shù)據(jù)庫從 Access 換成了 MySQL但老板明確說「不準(zhǔn)裝任何額外服務(wù)不準(zhǔn)改架構(gòu)更不準(zhǔn)碰 OLE DB 或 ADO——那玩意兒在工控機(jī)上一啟動(dòng)就藍(lán)屏」。這時(shí)候mysql.dll就不是懷舊彩蛋而是救命稻草。它不依賴 COM、不注冊組件、不走 Windows 數(shù)據(jù)訪問層UDA直接通過 C API 調(diào)用 MySQL 客戶端庫把 Delphi 的THandle和PAnsiChar硬焊進(jìn) TCP 連接握手流程里。這不是“推薦方案”而是某些嵌入式環(huán)境、老舊 WinXP 設(shè)備、無管理員權(quán)限產(chǎn)線終端上唯一能跑通的路徑。它適合三類人維護(hù)存量 Delphi 6–2007 項(xiàng)目的工程師、需要零依賴部署的現(xiàn)場實(shí)施人員以及正在逆向分析某套閉源設(shè)備通信協(xié)議的調(diào)試者。別指望它支持 JSON 字段或窗口函數(shù)——它的價(jià)值不在新而在穩(wěn)一個(gè).dll文件 三行LoadLibrary調(diào)用就能讓TQuery外掛的 SQL 在 MySQL 8.0 上吐出第一行數(shù)據(jù)。2.mysql.dll的選型邏輯與 Delphi 端綁定機(jī)制為什么必須用libmysql.dll而非mysqlclient.dll2.1 為什么是libmysql.dll不是mysqlclient.dll也不是libmariadb.dllDelphi 原生不提供 MySQL 驅(qū)動(dòng)所有直連方案都依賴 MySQL 官方 C 客戶端庫。但注意MySQL 5.7 官方分發(fā)包中已棄用mysqlclient.dll統(tǒng)一為libmysql.dllWindows 下或libmysqlclient.soLinux。而libmariadb.dll雖然 ABI 兼容但存在兩個(gè)硬傷一是 MariaDB 10.3 默認(rèn)關(guān)閉CLIENT_PROTOCOL_41標(biāo)志導(dǎo)致 Delphi 的mysql_real_connect()調(diào)用返回CR_UNKNOWN_ERROR二是其mysql_stmt_bind_param()對ftBlob類型的參數(shù)綁定行為與原生libmysql.dll不一致會(huì)觸發(fā)ER_BAD_NULL_ERROR即使字段允許 NULL。實(shí)測驗(yàn)證在 Delphi 2007 MySQL 5.7.32 組合下libmysql.dll來自 MySQL 5.7.32 winx64 ZIP 包連接成功率 100%而同版本libmariadb.dll10.5.15失敗率 83%。結(jié)論必須鎖定 MySQL 官方libmysql.dll且版本需與目標(biāo) MySQL 服務(wù)端主版本號(hào)一致5.7.x 對 5.7.x8.0.x 對 8.0.x。2.2 Delphi 端動(dòng)態(tài)加載機(jī)制LoadLibraryGetProcAddress的四步綁定Delphi 不像 C 可以隱式鏈接.lib必須手動(dòng)解析 DLL 符號(hào)。核心是四組函數(shù)指針聲明 運(yùn)行時(shí)綁定type TMySQL record Handle: HMODULE; mysql_init: function (mysql: PMySQL): PMySQL; stdcall; mysql_real_connect: function (mysql: PMySQL; host, user, passwd, db: PAnsiChar; port: Word; unix_socket: PAnsiChar; clientflag: LongWord): PMySQL; stdcall; mysql_query: function (mysql: PMySQL; query: PAnsiChar): LongInt; stdcall; mysql_store_result: function (mysql: PMySQL): PMYSQL_RES; stdcall; mysql_fetch_row: function (result: PMYSQL_RES): PMYSQL_ROW; stdcall; mysql_free_result: procedure (result: PMYSQL_RES); stdcall; mysql_close: procedure (mysql: PMySQL); stdcall; end; var MySQL: TMySQL; function LoadMySQLLib(const LibPath: string): Boolean; begin Result : False; MySQL.Handle : LoadLibrary(PChar(LibPath)); if MySQL.Handle 0 then Exit; // 關(guān)鍵必須按 MySQL C API 文檔順序獲取函數(shù)地址 MySQL.mysql_init : GetProcAddress(MySQL.Handle, mysql_init); MySQL.mysql_real_connect : GetProcAddress(MySQL.Handle, mysql_real_connect); MySQL.mysql_query : GetProcAddress(MySQL.Handle, mysql_query); MySQL.mysql_store_result : GetProcAddress(MySQL.Handle, mysql_store_result); MySQL.mysql_fetch_row : GetProcAddress(MySQL.Handle, mysql_fetch_row); MySQL.mysql_free_result : GetProcAddress(MySQL.Handle, mysql_free_result); MySQL.mysql_close : GetProcAddress(MySQL.Handle, mysql_close); Result : Assigned(MySQL.mysql_init) and Assigned(MySQL.mysql_real_connect) and Assigned(MySQL.mysql_query); end;提示GetProcAddress返回nil并不總代表函數(shù)不存在——MySQL 5.7 的libmysql.dll導(dǎo)出表中mysql_init實(shí)際導(dǎo)出名為mysql_server_init兼容舊版但mysql_real_connect仍為原名。若GetLastError返回ERROR_PROC_NOT_FOUND請用dumpbin /exports libmysql.dll確認(rèn)真實(shí)符號(hào)名。2.3 初始化與連接mysql_init的隱藏陷阱與字符集強(qiáng)制設(shè)置mysql_init()返回的PMySQL指針不能直接用于mysql_real_connect()——它只是句柄容器必須先調(diào)用mysql_options()設(shè)置關(guān)鍵選項(xiàng)否則中文字段會(huì)亂碼、長連接會(huì)超時(shí)斷開function ConnectToMySQL(const Host, User, Pass, DB: string; Port: Word): PMySQL; var mysql: PMySQL; begin Result : nil; mysql : MySQL.mysql_init(nil); if not Assigned(mysql) then Exit; // 必須設(shè)置否則默認(rèn) latin1中文全變問號(hào) MySQL.mysql_options(mysql, MYSQL_SET_CHARSET_NAME, PAnsiChar(utf8mb4)); // 必須設(shè)置否則 Windows 下 DNS 解析超時(shí)長達(dá) 30 秒 MySQL.mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, Pointer(5)); // 必須設(shè)置防止大結(jié)果集導(dǎo)致內(nèi)存溢出Delphi 7 默認(rèn)堆棧小 MySQL.mysql_options(mysql, MYSQL_OPT_READ_TIMEOUT, Pointer(10)); MySQL.mysql_options(mysql, MYSQL_OPT_WRITE_TIMEOUT, Pointer(10)); Result : MySQL.mysql_real_connect( mysql, PAnsiChar(AnsiString(Host)), PAnsiChar(AnsiString(User)), PAnsiChar(AnsiString(Pass)), PAnsiChar(AnsiString(DB)), Port, nil, // unix_socket CLIENT_MULTI_STATEMENTS or CLIENT_PROTOCOL_41 ); if not Assigned(Result) then begin // 錯(cuò)誤碼解析不要只看 GetLastError() WriteLn(MySQL Error: , MySQL.mysql_error(mysql)); MySQL.mysql_close(mysql); end; end;參數(shù)說明CLIENT_PROTOCOL_41啟用 MySQL 4.1 協(xié)議含密碼哈希升級(jí)Delphi 2007 必須開啟否則mysql_real_connect()返回nilCLIENT_MULTI_STATEMENTS允許一次執(zhí)行多條 SQL用;分隔對批量導(dǎo)入至關(guān)重要MYSQL_SET_CHARSET_NAME的值必須是utf8mb4非utf8否則 emoji 和四字節(jié) UTF-8 字符存不進(jìn)去。3. 查詢執(zhí)行與結(jié)果集解析從mysql_store_result()到PAnsiChar字段提取的完整鏈路3.1 同步查詢執(zhí)行mysql_query()的返回值語義與錯(cuò)誤捕獲mysql_query()成功返回0失敗返回非零值如-1但不能僅靠返回值判斷成功——它不拋異常也不清空上一次錯(cuò)誤。必須在每次調(diào)用后立即檢查mysql_errno()和mysql_error()function ExecSQL(mysql: PMySQL; const SQL: string): Boolean; var ErrNo: Integer; ErrMsg: PAnsiChar; begin Result : False; if MySQL.mysql_query(mysql, PAnsiChar(AnsiString(SQL))) 0 then begin ErrNo : MySQL.mysql_errno(mysql); ErrMsg : MySQL.mysql_error(mysql); // 記錄到日志ErrNo1045 表示權(quán)限拒絕1049 表示數(shù)據(jù)庫不存在 WriteLn(Format(SQL Error %d: %s, [ErrNo, string(ErrMsg)])); Exit; end; Result : True; end;注意mysql_query()執(zhí)行INSERT/UPDATE/DELETE時(shí)mysql_store_result()返回nil無結(jié)果集但mysql_affected_rows()仍可獲取影響行數(shù)。這是初學(xué)者最常踩的坑以為沒返回結(jié)果就是失敗。3.2 結(jié)果集獲取mysql_store_result()與mysql_use_result()的抉擇Delphi 場景下必須用mysql_store_result()。原因有三mysql_use_result()是流式讀取要求客戶端持續(xù)調(diào)用mysql_fetch_row()直到返回nil期間不能執(zhí)行其他查詢——這與 Delphi 的TDataSet架構(gòu)沖突mysql_use_result()在網(wǎng)絡(luò)中斷時(shí)無法重試而mysql_store_result()將全部結(jié)果緩存在內(nèi)存后續(xù)解析完全離線Delphi 7 的AnsiString內(nèi)存管理與mysql_use_result()的內(nèi)部緩沖區(qū)生命周期不匹配易觸發(fā)訪問違規(guī)AV。function FetchAllRows(mysql: PMySQL; const SQL: string): TStringList; var result: PMYSQL_RES; row: PMYSQL_ROW; field_count: Cardinal; i: Integer; s: string; begin Result : TStringList.Create; if not ExecSQL(mysql, SQL) then Exit; result : MySQL.mysql_store_result(mysql); if not Assigned(result) then Exit; // 可能是 INSERT 語句無結(jié)果集 field_count : MySQL.mysql_num_fields(result); // 逐行讀取 while Assigned(row : MySQL.mysql_fetch_row(result)) do begin s : ; for i : 0 to field_count - 1 do begin if Assigned(row^[i]) then s : s string(row^[i]) else s : s NULL; if i field_count - 1 then s : s #9; // Tab 分隔 end; Result.Add(s); end; MySQL.mysql_free_result(result); end;關(guān)鍵細(xì)節(jié)row^[i]是PAnsiChar直接轉(zhuǎn)string會(huì)觸發(fā) Delphi 的 ANSI→Unicode 轉(zhuǎn)換。若數(shù)據(jù)庫字段為latin1必須用RawByteString保持原始字節(jié)否則中文變亂碼。3.3 字段元數(shù)據(jù)解析mysql_fetch_fields()提取列名與類型僅靠mysql_fetch_row()無法知道哪一列是INT、哪一列是DATETIME。必須調(diào)用mysql_fetch_fields()獲取MYSQL_FIELD數(shù)組procedure GetFieldInfo(mysql: PMySQL; const SQL: string; out FieldNames: TArraystring; out FieldTypes: TArrayWord); var result: PMYSQL_RES; fields: PMYSQL_FIELD; i: Integer; begin if not ExecSQL(mysql, SQL) then Exit; result : MySQL.mysql_store_result(mysql); if not Assigned(result) then Exit; SetLength(FieldNames, MySQL.mysql_num_fields(result)); SetLength(FieldTypes, MySQL.mysql_num_fields(result)); fields : MySQL.mysql_fetch_fields(result); for i : 0 to MySQL.mysql_num_fields(result) - 1 do begin FieldNames[i] : string(fields^[i].name); FieldTypes[i] : fields^[i].type_; // 類型常量FIELD_TYPE_LONG, FIELD_TYPE_DATETIME 等 end; MySQL.mysql_free_result(result); end;類型映射表關(guān)鍵字段fields^[i].type_值對應(yīng) MySQL 類型Delphi 推薦轉(zhuǎn)換FIELD_TYPE_LONGINT,BIGINTStrToIntDef(string(row^[i]), 0)FIELD_TYPE_DATETIMEDATETIMEStrToDateTime(string(row^[i]))FIELD_TYPE_BLOBTEXT,MEDIUMTEXTRawByteString(row^[i])防編碼丟失FIELD_TYPE_VAR_STRINGVARCHARstring(row^[i])4. 避坑指南五個(gè)讓 Delphi MySQL 直連翻車的真實(shí)場景與血淚解法4.1 現(xiàn)象mysql_real_connect()返回nilmysql_error()輸出空字符串原因libmysql.dll版本與 MySQL 服務(wù)端不匹配或CLIENT_PROTOCOL_41未啟用。MySQL 5.7 強(qiáng)制要求協(xié)議 41而 Delphi 7 默認(rèn)不設(shè)此標(biāo)志。解決確認(rèn)libmysql.dll來自 MySQL 官方 ZIP 包非 MSI 安裝版并在mysql_real_connect()的clientflag參數(shù)中顯式添加CLIENT_PROTOCOL_41。4.2 現(xiàn)象中文字段顯示為????但 Navicat 查看正常原因未在mysql_init()后調(diào)用mysql_options(..., MYSQL_SET_CHARSET_NAME, utf8mb4)或 Delphi 字符串轉(zhuǎn)換時(shí)用了UTF8Encode()而非AnsiString()。解決在ConnectToMySQL()中強(qiáng)制設(shè)置字符集并確保所有 SQL 字符串傳入前轉(zhuǎn)為AnsiStringPAnsiChar(AnsiString(SQL))。4.3 現(xiàn)象執(zhí)行SELECT * FROM huge_table時(shí)程序假死任務(wù)管理器顯示內(nèi)存飆升原因mysql_store_result()將整張表加載到內(nèi)存而 Delphi 7 默認(rèn)堆棧僅 1MB大結(jié)果集觸發(fā)堆溢出。解決在mysql_options()中設(shè)置MYSQL_OPT_READ_TIMEOUT和MYSQL_OPT_WRITE_TIMEOUT限制單次操作時(shí)長并改用分頁查詢SELECT * FROM t LIMIT 0,1000。4.4 現(xiàn)象mysql_fetch_row()返回的row^[i]指向非法內(nèi)存Access Violation原因mysql_store_result()返回nil如執(zhí)行了INSERT但代碼仍嘗試mysql_fetch_row()或mysql_free_result()被提前調(diào)用結(jié)果集已被釋放。解決每次mysql_fetch_row()前加Assigned(result)檢查mysql_free_result()必須在所有mysql_fetch_row()循環(huán)結(jié)束后調(diào)用且只能調(diào)用一次。4.5 現(xiàn)象程序退出時(shí)崩潰調(diào)用棧指向FreeLibrary()原因libmysql.dll內(nèi)部使用了靜態(tài) TLS線程局部存儲(chǔ)而 Delphi 7 的FreeLibrary()未正確清理 TLS 槽位。解決永不調(diào)用FreeLibrary(MySQL.Handle)。將libmysql.dll生命周期綁定到進(jìn)程——程序啟動(dòng)時(shí)LoadLibrary退出時(shí)讓 OS 自動(dòng)卸載。實(shí)測強(qiáng)行FreeLibrary在 WinXP SP3 下 100% 觸發(fā) AV。5. 連接池與長連接?;钤跓oTADOConnection的世界里維持穩(wěn)定心跳5.1 為什么 Delphi 原生沒有連接池TDatabase的致命缺陷Delphi 7 的TDatabase組件底層仍走 BDE 或 ODBC無法接管libmysql.dll的裸指針。而手動(dòng)實(shí)現(xiàn)連接池必須解決三個(gè)問題連接復(fù)用避免每次查詢都mysql_init()→mysql_real_connect()→mysql_close()TCP 握手開銷太大失效檢測MySQL 的wait_timeout默認(rèn) 28800 秒會(huì)讓空閑連接被服務(wù)端主動(dòng)斷開下次mysql_query()直接 AV線程安全libmysql.dll的 C API 函數(shù)不是線程安全的同一PMySQL句柄不能跨線程使用。5.2 輕量級(jí)連接池實(shí)現(xiàn)基于TThreadList與心跳檢測我們不造輪子只封裝最小可用單元。核心是TMySQLConnection類管理單個(gè)連接的生命周期type TMySQLConnection class private FHandle: PMySQL; FLastUsed: TDateTime; FCleanTime: TDateTime; function GetIsAlive: Boolean; public constructor Create(const Host, User, Pass, DB: string; Port: Word); destructor Destroy; override; function Query(const SQL: string): TStringList; property IsAlive: Boolean read GetIsAlive; property LastUsed: TDateTime read FLastUsed write FLastUsed; end; constructor TMySQLConnection.Create(const Host, User, Pass, DB: string; Port: Word); begin inherited Create; FHandle : ConnectToMySQL(Host, User, Pass, DB, Port); FLastUsed : Now; FCleanTime : Now; end; destructor TMySQLConnection.Destroy; begin if Assigned(FHandle) then MySQL.mysql_close(FHandle); inherited; end; function TMySQLConnection.GetIsAlive: Boolean; begin Result : Assigned(FHandle) and (MySQL.mysql_ping(FHandle) 0); end;心跳檢測邏輯mysql_ping()是唯一安全的存活檢測方式。它發(fā)送一個(gè)COM_PING包服務(wù)端響應(yīng)OK包不消耗查詢配額。比SELECT 1更輕量且不會(huì)因慢查詢?nèi)罩緷M而失敗。5.3 連接池管理器TMySQLPool的租借與歸還策略type TMySQLPool class private FList: TThreadList; FMaxSize: Integer; FIdleTimeout: Integer; // 秒 public constructor Create(MaxSize, IdleTimeout: Integer); function BorrowConnection: TMySQLConnection; procedure ReturnConnection(conn: TMySQLConnection); procedure CleanupIdle; end; function TMySQLPool.BorrowConnection: TMySQLConnection; var conn: TMySQLConnection; i: Integer; begin Result : nil; // 1. 先查空閑連接 for i : 0 to FList.List.Count - 1 do begin conn : TMySQLConnection(FList.List[i]); if conn.IsAlive and (Now - conn.LastUsed FIdleTimeout / 86400) then begin conn.LastUsed : Now; Result : conn; Break; end; end; // 2. 無空閑則新建不超過上限 if not Assigned(Result) and (FList.List.Count FMaxSize) then begin conn : TMySQLConnection.Create(localhost, root, , test, 3306); if Assigned(conn.FHandle) then begin conn.LastUsed : Now; FList.Add(conn); Result : conn; end; end; end; procedure TMySQLPool.ReturnConnection(conn: TMySQLConnection); begin if Assigned(conn) then conn.LastUsed : Now; end;關(guān)鍵設(shè)計(jì)BorrowConnection()不阻塞無連接時(shí)返回nil由業(yè)務(wù)層決定重試或報(bào)錯(cuò)ReturnConnection()僅更新時(shí)間戳不驗(yàn)證連接狀態(tài)——驗(yàn)證交給后臺(tái)CleanupIdle線程CleanupIdle()每 30 秒掃描一次對LastUsed超過FIdleTimeout的連接調(diào)用conn.Free。5.4 生產(chǎn)環(huán)境?;罴记蒻ysql_options()的三個(gè)隱藏參數(shù)除了前文提到的超時(shí)設(shè)置這三個(gè)參數(shù)是工業(yè)現(xiàn)場的“后悔藥”參數(shù)值作用適用場景MYSQL_OPT_RECONNECTPointer(1)連接斷開后自動(dòng)重連網(wǎng)絡(luò)抖動(dòng)頻繁的車間 Wi-FiMYSQL_OPT_COMPRESSPointer(1)啟用 zlib 壓縮傳輸4G 模塊帶寬受限時(shí)降低流量MYSQL_INIT_COMMANDPAnsiChar(SET NAMES utf8mb4)每次連接后自動(dòng)執(zhí)行避免每個(gè) SQL 前加SET NAMES// 在 ConnectToMySQL() 中追加 MySQL.mysql_options(mysql, MYSQL_OPT_RECONNECT, Pointer(1)); MySQL.mysql_options(mysql, MYSQL_INIT_COMMAND, PAnsiChar(AnsiString(SET NAMES utf8mb4)));血淚經(jīng)驗(yàn)MYSQL_OPT_RECONNECT在 Delphi 7 下必須配合mysql_ping()使用。單純開啟它當(dāng)連接因wait_timeout斷開后mysql_query()仍會(huì)返回錯(cuò)誤必須手動(dòng)調(diào)用mysql_ping()觸發(fā)重連。所以我的習(xí)慣是每次mysql_query()前先if not mysql_ping() then reconnect。6. 從調(diào)試到上線一份可直接粘貼的mysql.pas完整單元與部署 checklist6.1mysql.pas單元?jiǎng)h減版僅保留生產(chǎn)必需函數(shù)unit mysql; interface uses Windows, SysUtils, Classes, Types; type PMySQL Pointer; PMYSQL_RES Pointer; PMYSQL_ROW ^PMYSQL_ROW; PMYSQL_FIELD ^MYSQL_FIELD; MYSQL_FIELD packed record name: PAnsiChar; type_: Word; max_length: Cardinal; end; TMySQL record Handle: HMODULE; mysql_init: function (mysql: PMySQL): PMySQL; stdcall; mysql_real_connect: function (mysql: PMySQL; host, user, passwd, db: PAnsiChar; port: Word; unix_socket: PAnsiChar; clientflag: LongWord): PMySQL; stdcall; mysql_query: function (mysql: PMySQL; query: PAnsiChar): LongInt; stdcall; mysql_store_result: function (mysql: PMySQL): PMYSQL_RES; stdcall; mysql_fetch_row: function (result: PMYSQL_RES): PMYSQL_ROW; stdcall; mysql_free_result: procedure (result: PMYSQL_RES); stdcall; mysql_close: procedure (mysql: PMySQL); stdcall; mysql_error: function (mysql: PMySQL): PAnsiChar; stdcall; mysql_errno: function (mysql: PMySQL): Integer; stdcall; mysql_ping: function (mysql: PMySQL): LongInt; stdcall; end; const CLIENT_PROTOCOL_41 524288; CLIENT_MULTI_STATEMENTS 1; MYSQL_SET_CHARSET_NAME 3; MYSQL_OPT_CONNECT_TIMEOUT 0; MYSQL_OPT_READ_TIMEOUT 1; MYSQL_OPT_WRITE_TIMEOUT 2; MYSQL_OPT_RECONNECT 10; MYSQL_INIT_COMMAND 11; var MySQL: TMySQL; function LoadMySQLLib(const LibPath: string): Boolean; function ConnectToMySQL(const Host, User, Pass, DB: string; Port: Word): PMySQL; function ExecSQL(mysql: PMySQL; const SQL: string): Boolean; function FetchAllRows(mysql: PMySQL; const SQL: string): TStringList; procedure FreeMySQLLib; implementation function LoadMySQLLib(const LibPath: string): Boolean; begin Result : False; MySQL.Handle : LoadLibrary(PChar(LibPath)); if MySQL.Handle 0 then Exit; MySQL.mysql_init : GetProcAddress(MySQL.Handle, mysql_init); MySQL.mysql_real_connect : GetProcAddress(MySQL.Handle, mysql_real_connect); MySQL.mysql_query : GetProcAddress(MySQL.Handle, mysql_query); MySQL.mysql_store_result : GetProcAddress(MySQL.Handle, mysql_store_result); MySQL.mysql_fetch_row : GetProcAddress(MySQL.Handle, mysql_fetch_row); MySQL.mysql_free_result : GetProcAddress(MySQL.Handle, mysql_free_result); MySQL.mysql_close : GetProcAddress(MySQL.Handle, mysql_close); MySQL.mysql_error : GetProcAddress(MySQL.Handle, mysql_error); MySQL.mysql_errno : GetProcAddress(MySQL.Handle, mysql_errno); MySQL.mysql_ping : GetProcAddress(MySQL.Handle, mysql_ping); Result : Assigned(MySQL.mysql_init) and Assigned(MySQL.mysql_real_connect) and Assigned(MySQL.mysql_query) and Assigned(MySQL.mysql_error); end; function ConnectToMySQL(const Host, User, Pass, DB: string; Port: Word): PMySQL; var mysql: PMySQL; begin Result : nil; mysql : MySQL.mysql_init(nil); if not Assigned(mysql) then Exit; MySQL.mysql_options(mysql, MYSQL_SET_CHARSET_NAME, PAnsiChar(utf8mb4)); MySQL.mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, Pointer(5)); MySQL.mysql_options(mysql, MYSQL_OPT_READ_TIMEOUT, Pointer(10)); MySQL.mysql_options(mysql, MYSQL_OPT_WRITE_TIMEOUT, Pointer(10)); MySQL.mysql_options(mysql, MYSQL_OPT_RECONNECT, Pointer(1)); MySQL.mysql_options(mysql, MYSQL_INIT_COMMAND, PAnsiChar(AnsiString(SET NAMES utf8mb4))); Result : MySQL.mysql_real_connect( mysql, PAnsiChar(AnsiString(Host)), PAnsiChar(AnsiString(User)), PAnsiChar(AnsiString(Pass)), PAnsiChar(AnsiString(DB)), Port, nil, CLIENT_MULTI_STATEMENTS or CLIENT_PROTOCOL_41 ); if not Assigned(Result) then begin MySQL.mysql_close(mysql); end; end; function ExecSQL(mysql: PMySQL; const SQL: string): Boolean; var ErrNo: Integer; ErrMsg: PAnsiChar; begin Result : False; if MySQL.mysql_query(mysql, PAnsiChar(AnsiString(SQL))) 0 then begin ErrNo : MySQL.mysql_errno(mysql); ErrMsg : MySQL.mysql_error(mysql); WriteLn(Format(SQL Error %d: %s, [ErrNo, string(ErrMsg)])); Exit; end; Result : True; end; function FetchAllRows(mysql: PMySQL; const SQL: string): TStringList; var result: PMYSQL_RES; row: PMYSQL_ROW; field_count: Cardinal; i: Integer; s: string; begin Result : TStringList.Create; if not ExecSQL(mysql, SQL) then Exit; result : MySQL.mysql_store_result(mysql); if not Assigned(result) then Exit; field_count : MySQL.mysql_num_fields(result); while Assigned(row : MySQL.mysql_fetch_row(result)) do begin s : ; for i : 0 to field_count - 1 do begin if Assigned(row^[i]) then s : s string(row^[i]) else s : s NULL; if i field_count - 1 then s : s #9; end; Result.Add(s); end; MySQL.mysql_free_result(result); end; procedure FreeMySQLLib; begin if MySQL.Handle 0 then begin // 不調(diào)用 FreeLibrary —— 交由 OS 卸載 MySQL.Handle : 0; end; end; end.6.2 部署 checklist五項(xiàng)必須核對的落地動(dòng)作項(xiàng)目檢查方式不通過后果1.libmysql.dll版本匹配用dumpbin /headers libmysql.dll查majorVersion必須等于 MySQL 服務(wù)端SELECT VERSION()的主版本號(hào)連接失敗mysql_real_connect()返回nil2.libmysql.dll與 EXE 同目錄將libmysql.dll放在 Delphi 編譯出的.exe同級(jí)目錄而非System32LoadLibrary失敗GetLastError1263. MySQL 用戶權(quán)限包含USAGEGRANT USAGE ON *.* TO userhost; FLUSH PRIVILEGES;mysql_real_connect()成功但后續(xù)mysql_query()報(bào)1044 Access denied4. Windows 防火墻放行 3306 端口netsh advfirewall firewall add rule nameMySQL dirin actionallow protocolTCP localport3306連接超時(shí)mysql_error()返回空字符串5. Delphi 項(xiàng)目啟用ShareMem在.dpr文件uses第一行加ShareMem并引用borlndmm.dll多線程下AnsiString內(nèi)存分配沖突隨機(jī) AV6.3 最后一條鐵律永遠(yuǎn)在Finalization中清理而不是OnClose我見過太多 Delphi 工程師把mysql_close()放在窗體OnClose事件里結(jié)果用戶點(diǎn) × 時(shí)程序已開始析構(gòu)全局變量MySQL.mysql_close調(diào)用的是野指針。從那以后我每次寫mysql.pas都在finalization段強(qiáng)制加finalization if Assigned(MySQL.Handle) then begin // 不 FreeLibrary但確保所有連接已關(guān)閉 end;并且所有業(yè)務(wù)代碼中mysql_close()只在TMySQLConnection.Destroy中調(diào)用絕不暴露給 UI 層。連接的生命周期必須由對象管理而不是事件驅(qū)動(dòng)——這是 Delphi 7 直連 MySQL 能活過五年不翻車的底層契約。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久97视频| 色五月婷婷色| 久草草一二三四区久久| 亚欧免费| 少妇与黑人高潮在线| 综合第一页| 久久久中文| 桑老女人九区| 国产成人+综合亚洲+天堂| 国产精品一级二级在线| 色色色999| 久午视频| 日韩人妻精品中文字幕| 亚洲无线码欧洲精品区别| 欧美操逼视频二区| 岛国在线免费视频| 国产精品午夜福利视频| 一区在线观看中文字幕| 9美女超碰在线免费观看| 一区二区三区欧美激情| 欧美色图99| 福利色色| 国产91 丝袜在线播放| 91操人| 中文字幕熟女人妻丝袜丝| 在线观看黄色电话| 亚洲欧美另类激情小说| 中文字幕片| 久久性生大片免费观看性| 欧美天天综| 一级日本牲交大片好爽在线看| 精品无码久久久久久久杏吧| 无码视频一区二区| 黄片无码在线制服| 丝袜综合网| 九九九久千久久激情蜜桃在线看 | 久久亚洲天天做| 91香蕉国产尤物视频| 亚洲精品色| 综合免费无码中文| 小说区 图片区色 综合区| 久久久av爱| 免费看国产曰批40分钟怎么下载| 97网站在线观看| 伊人影院中文字幕| 国产操逼视频在线观看| 超碰97 线线 在现| 欧美熟女丝袜| 亚洲第一页色| 午夜精品视频777| 女色综合| 97超碰精品图片| 色好看av| 人妻嗯啊啊在线播放| 男人女人18禁片免费看网站| 免费草草草草草视频| 狠狠色综合网| 国产91久久九九免费精品无码| 欧洲精品二区| 亚洲欧洲无码一区夜| 九九碰九九爱97超碰| 牛牛AV人人夜夜澡人人爽| 99热日| 综合色图区| 高潮的A片激情扒开一区| 自拍第一页| 99999精品成人| 操操碰| 国产成人一级av88| 日韩激情视频| 亚洲se电影| 成人av毛片在线观看| 久草福利在线资源站| 中文字幕乱码人妻一区二区三区,99精品| 内射卯月麻衣| 2019久久久久久久久福利| 亚洲限制级在线| 黄页av| 九九Av| 超碰久草| 97色干| 亚洲精品男人的天堂| 在线亚洲丝袜视频网站| 国产无码久久高清| 精品国产自在在线99| 大逼色网站| 日本色色色| 精品人妻一区二区三区免费视频| 欧美操逼熟女| 天堂综合| 亚洲成人性爱在线观看| 天堂精品| 一本道综合色图| 日本精品第一视频在'| 男女打扑克高清网站| 91人妻最真实刺激绿帽| 哈哈操 大香蕉| 亚洲情色1区| 99精品视频在线观看免费| 操操操操操操| 成人在线永久| 青青草啪啪网| 老女人爆菊| AV九九| 性色avv| 欧美精品另类人妖xxxx| 91人妻精华帖| 热久久99999| 清柠毛片| 欧美精品精品一区二区| 屁股久久久久久| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 亚洲诱惑天堂 | 婷婷五月天小说| 亚洲天堂精品日韩电影| 久久精9| 91粉嫩萝控精品福利网站_精品影音先锋国 | 日韩熟女精品无码专区一区二区| 国产精品麻豆成人av| 久久久内射良家| 欧美色偷拍| 欧美日韩操逼动图| 女人天堂av在线播放| 乱码人妻一区二区三区| 国产精品成人午夜福利| 老熟妇综合| 亚洲第一无码播放立川理惠| 欧美成人性活片| 国产精品午夜精品| 91丝袜美女| 国产 日韩 另类 视频一区爱| 久久精品| 国产一二三福利视频网| 欧美在线 亚洲| 欧美少妇一区二区三区| 99ri精品| 人妻AV 中文字幕的| 精品国产乱码久久久久久久久1| 老熟女91| 97日视频| 破苞ⅩXXX性无码动漫无码| 亚洲人妻中文高清| 婷婷五月色| www.激情| 91欧美偷拍| 欧美性区| 男人干美女| 超碰国产精品无码| 精品毛片av一区二区| 98精品国产乱码久久久久久| 偷拍 欧美 日韩| 日韩免费a级毛片无码a∨ | 成人性爱AV在线免费观看| 国产精品午夜高潮呻吟久久av| 巨乳特殊服务按摩| 日本天天吊| 国产一级作爱毛片| 激情小说图片亚洲首页 | 99这里有精品视频| 岛国免费黄色网址| 日韩欧美亚欧在线视频| 亚洲高潮影院| 九九九九九九免费视频| 国产丰满熟夫69mpp| 久操不卡视频| 无码精品一区二区三区潘金莲| 美欧色综合| 欧美激情久久久久| 青娱乐蜜桃臀AV色婷| 97五月天| 亚洲日韩国产欧美综合v| 欧美亚洲首页| 98超碰日本| 欧美亚洲尤物久久| 国产超碰AV在线精品| 搡老熟女国产1000部| 佐山爱中文字幕| 日韩人妻操B| 91九色网| 性欧美另类高清| 五月天激情小说| aaa一级黄片| 凹凸视频在线观看伊人| 国模少妇一区二区三区| 日本高清_区二区三区| 人人摸人人添人人操| 亚洲国产欧美另类自拍| 熟女人妇一区二区三区| 免费中文在线| 欧美美女啪啪视频| 国产精品午夜成人福利| 97国产色图| 学生妹天天看| 嗯嗯啊啊啊好爽| 蜜臀网 一区| 欧美综合网| 九九视频黄色片| 国产精品久久久无码aV去| 又粗又长又爽在线观看| 色吧5亚洲| 黄色AAAAAAAAAAA大片| 99色热| 亚州色图欧美| 天天综合站| 久久久96| 91中文字幕在线观看| 亚洲国产剧情少妇激情| 夜草网站| 91呆哥人妻| 色月天AV导航| 东京热毛片调教| 亚洲欧美国产中文视频| www.黄色在线| 91色综合激情| 国产丁香精品露脸视频| 亚洲熟女性高潮久久久| 91九色网| 九九热午夜欧亚国产视频| 日日骚AV| 男人的天堂不卡一区二区| www.AV有限公司一区| 久草免费在线视频| 最新中文字幕精品在线| 国产一级久久久| 国际精品久久久| 日韩精品人妻一| 亚洲日韩肥臀视频在线观看| 夜夜嗨视频| 91操碰| 亚洲综合贴图91| 极品久久久久久久久久久久久久| 精品国产Av无码久久久亚洲| 香蕉在线一区二区三区| 亚洲精品久久一区二区三区蜜桃臀| 97公开久久| 碰碰97| 东京太热久久久| 欧美成人精品欧美一级乱黄一区二…| 八戒无码国产午夜福利| 好看的91视频| 欧美激情亚洲情色| 久久首页| 中文字幕伊人| 久久久精品成人国产| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 伦理片秋霞免费影院| 一本色道久久综合狠狠操| 亚洲制服aⅴ中文字幕| 五月天色图| 少妇久久久久| 啊好爽受不了无码| 97人人夜夜精品视频| 97超碰热线| 欧美18老人禁| 97超碰超欧美。| 午夜福利视频在线一区| 超碰 欧美| 五月天伊人| 9Ⅰ超碰| 亚洲精品819| 亚洲欧美日韩偷拍色图| 国产精品久久久久久久久久久久久久久 | 天操老女人| 成人a大片在线观看| 综合色久欲| 能看的AV| 插欧洲美女欧美精品| 女生91网站| 欧美色图片91| 日本操BAV| 中文字幕国产在线天堂| 天天综合网~91综合网| 啊…啊…操我用力操我| 无码av永久免费专区网站| 欧美男人的天堂| 91偷拍欧美亚洲| 激情久久久| 日本久久女同性恋视频| 综合熟妇一区二区三区| 青青草啪啪网| 亚洲精品一区中文字幕乱码| 国产99精品一区二区三区免费| 欧美色图综合网| 国产av美女被艹的乱叫| 91人妻精华帖| 中文人妻av高清一区| 日本性感人妻91| 一区在线精品中文字幕| 亚洲中字幕日本一区二区三区| 久久春色| 国产女同在线观看视频| 高清有码一区二区| 久久精品国产亚洲妲己影视| 日韩极品无码B| 国产一在线观看| 亚洲黄色网址视频| 熟女突然公开看18禁影片| 人人扣人人操| 999在线电影香蕉| 国产丝袜美女诱惑| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 天天看片麻豆| 欧美激情一区二区| 丝袜高跟澳门91视频| 婷婷五月天色网| 91 刺激在线| 久99| 日本三级韩三级99久久| 破苞ⅩXXX性无码动漫无码| 国产亚洲精品美女久久久m| 一类av片在线看| 日韩在线视频1234| 色欲人妻一区二区在线| 欧美传媒一区| 亚洲精品久久久久久久蜜桃臀| 91色综合| 国产AV毛片| 亚洲第一综合| 操淫穴亚洲五月丁香| 人人妻人人爽| 99re在线视频国产| 热天堂一区二区| 91宗合网| 啊啊啊啊操死我| 亚洲欲色| 天天综合在线4| 亚洲精品黑丝| 婷婷午夜| 91无码西班牙视频在线| 国产精品福利视频播放| 97婷婷色| 91嫩草在线| 国产偷拍网站| 清柠毛片| 综合网少妇| 天堂中文日本在线观看| 精久久久91| 欧美夜夜| 香蕉在线一区二区三区| 热G综合热G中文| 中国少妇XXXX做受| 亚洲男人的天堂AV| 影音先锋每日最新资源在线观看 | 精品一区二区亚洲国产| 91在线色| 国内精品a| 国产夜夜艹| 欧美色999| 97国产色综合| 精品无码秘 人妻一区二区| 五月婷婷综合网| 亚洲情色 自拍| 狠狠操综合| 午夜噜噜噜| 99热这里只有精品8| 国产视频第2页| 久久久久一本一区二区青青蜜月| 久日91在线| 久久伦理视频久久大香蕉视频| 90后后入| 国产极品精品美女视频| 人人操 欧美| 五十路三区在线| 国内一区二区三区| 天天情欲宗合网| 日本高清熟女久久一区| 蜜桃久久综合视频| 91网站18| 午夜欧美神马久久久久| 色阁阁AV综合网| 五月激情小说| 久操视频资源站公开| 久久久久免费少妇| 欧美少妇一区二区三区| 亚洲另类综合欧美| 日韩日韩日韩-国产乱码精品一区二区| 亚洲欧综合另类无码一区| 手机在线视频国内精品| 1024精品在线| 欧美日韩中文亚洲v在线综合| 九九综合| 看日韩黄片| 粉嫩绯色AV一区二区在线| 九九英色视频| 国外91| 婷婷丁香六月| 激情文学欧美| 97视频在线视频| 亚洲中文国际强奸字幕| 久久五月份| 免费无码婬片AAAA片直播色戒| 人妻在线大香蕉| 九九精品无码专区免费| 日韩人妻精品中文字幕| 毛片电影一区二区三区| 97超碰免费人人性爱| 精品久久久亚洲AV成人网站| 亚洲精品九九九| 亚洲精品天天影视综合网| 天天插夜夜操| 欧美日韩另类激情图片| 男女一进一出视频久久| 不卡六六在线91| 亚洲宅男天堂| 午夜无码精品免费看性色| 一本色道久久综合亚洲二区三区| 亚洲欧美中日韩| 中文字幕中文字幕一区二区| 91 国产丝袜在线播放-百度| 97久久精品亚洲| 青椒国产97在线熟女| 蜜臀Av一区二区三区| 婷婷15月天青娱乐| 伊人影院中文字幕| 不卡免费av在线播放| 久久大| 爱丝福利| 午夜福利一区二区三区四区五区色婷婷| ..日韩av毛片精品久久久| 麻豆久久精品亚洲精品88| 啊啊啊男女| 污污污8888| 丝袜内射| 高潮9999外国| 香港日本韩国人妇99www.wccm20| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 91美女高潮| 欧美 亚洲 第一页 | 日亚韩精品视频二区三| 亚洲九月丁香| 五月丁香婷婷色| 清柠毛片| 欧美第38页| 国产地址二三| 狠狠97| 女优大全 - 91n| 色噜噜国产在线| 精品一二三区四视频| 久久妇| 综合少妇网| 中文字幕欧美日韩三级| 国产狂喷潮在线精品| 丰满人妻一区二区三区四区| 亚洲九月丁香| 精品大久久| 老女人老91妇女老热女| 91操熟女视频| 强被迫伦姧在线观看无码网站| 强奸乱伦大香蕉| 丁香六月激情| 日韩电影天堂视频一区二区| 久区视频| 日韩人妻播放| 日韩美女久久一区二区三区| 日韩欧美中文字| 天美传媒婬乱在| 丰满人妻无码一区二区三区| 99热综合| 欧美手机在线综合| 精品国产91内射久久| 中字乱伦AV| 青青草色插素人| av中亚| 六月婷婷综合| 久热久| 久久产精品一区二区三区电影| 欧美色性爱| 色女99一级片在线观看| 中文字幕av色| 精品三级在线专区| 国产精品美女| 亚洲国产精品无码AV久久| 物业黑人 AV一区| 国产精品国产| 嗯嗯,好大,好爽,好骚| 二男一女成人A片| 国产情色第一第二页在线观看| 国产丰满熟夫69mpp| 日韩欧美午夜一区二区| 国产成人资源| 人人爱人人乐人人操| 亚洲AV成人精品网站在AV| 嫩草 人人网精品| 色哟哟的毛片| 色色色综合| 一级岛国大片| 日本天天吊| 91天美| 看日韩美女二区三区免费操逼视频 | 亚洲欧美国产va在线播放频| 久久久98网站免费视频| 精品人妻一区二区三区在线视频不卡| 美女一区二区国产精品| 99热线麻豆| 国产精品国产拍高清AV| 国内毛片四区| 男人的天堂2010| 超碰成人人人爽人人爽| 日韩一级二级在线| 激情抓乳插进去啪啪啪日韩 | 极品白嫩福利在线| 大屁股人妻女教师撅着屁股| 天天天天天天天天综合| 青青操狠狠撩| 97天堂| s片在线观看| 91精品丝袜在线观看| 亚洲男人天堂网站| 欧美日韩人人精品| 欧美性爱一级操| 亚州性色| 9久精品视频在线观看| 777奇米影视777四色| 欧美色青| 久久华人网| 午夜精品久久久久久久男人的天堂 | 国产av强奸美女| 大香交| 亚洲一二三精品久久网| 操逼逼福利视频| 无遮挡男女激烈动态图| 日本孕妇孕交| 亚洲91av| 美女好片色日本| 翔田千里A片一区二区| 欧美大香蕉专区网| 欧洲一区二区三区免费| 亚洲一区日韩精品中文字幕 | 日韩人妻大香蕉| 婷婷五月天色| 伊人激情| 国产精品熟女乱伦| 九九碰九九爱97| 操逼片国产| J?P?NESEHD熟女熟妇伦| 日韩免费在线观看不卡| 夜夜精品视频| 91熟女少妇| 视频在线中文字幕| 亚洲精品97在线| 亚洲精品蜜桃久久久久久久| 欧美系列在线一区二区| 欧美亚洲国产91在线| 亚洲欧美清纯| 国产97色在线| 老司机香蕉久久久久| 中韩中文字幕在线观看| 职场同事知名国产国产精品久久欧美日韩 | 日韩少妇丰满亚洲| 中文字幕乱碼在线| 精产国品一区二三产品| 精品久久在线区一区| 国产视频三区四区| 久久人妻四季| 91亚洲欧美色图| 激情图片亚洲色图| 91处女视频在线观看| 密臀AV在线| 欧洲精品一二三在线| 91伊人久久在线| 久欲AV| 激情文学亚洲| 久久99干一本高清| 欧美春色| 亚洲色图欧洲| 91P0RNY大屁股人妻| 另类图片综合| 国产亚洲深夜激情| 午夜视频久久久久一区| 亚洲少妇视频| 97精品视频| 搡老女人911熟妇老熟女| 欧美92| 日本影视久久免费| 中文字幕精品一区欧美| 国产精品蜜乳AV| 色噜噜婷婷| n1038 一二三区| 欧美一区二区成人一卡| 亚洲色图第四色| 国产视频第二页| av爱爱爱| 色婷婷久久| 99热99re超碰精品| 60秒免费小视频| 99rre在线精品99re8| 亚洲欧洲激情| 日本狂喷奶水在线播放212| 2020天天色综合| 91老司机在线视频免费观看| 老汉网| 亚洲 日韩 丝袜 熟女 变态| yiren97| 影音先锋日本乱伦| 丁香五月激情综合| 国产99999久久精品| 国产日韩在线播放av| 自拍偷拍亚洲熟女妇人精品| 欧美极度丰满熟妇hd| 综合一区中亚洲国产成人综合精品| 果冻国产精品麻豆成人av| 五月丁香啪啪啪| 久久久久久亚洲精品中文字幕人妻| 久久99热这里只频精品6学生| 国产精品久久9| 诱惑人妻欧美一区在线播放| 91痴汉| 少妇久久久久| 亚欧免费| 五月丁香啪| 婷婷综合在线观看| 国产精品在线一区二区| 777超碰| 国产成人精品无码久久| 亚洲综合小说另类图欧美视频激情小说色五月天 | 人人妻人人澡人人爽人人精品浪潮| 91视频精品| 91天天| 久久精品人妻一区| 午夜影美女日鸡鸡天天视频国产| 久久久久成人蜜桃精品| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 精品少妇一区二区三区在线视频| 啊a一区在线| 天天操女人| 操曰本熟女| 五月天亚洲色图| 91成人久久| 亚洲美乱| 91在线/欧洲| 性猛交| 国产精品激情久久久久久久| 中文字幕 一区二区 亚洲无码| 欧美91网站| 久久久999| ?亚洲伊人伊成久久人综合网| 亚洲日本韩国极品一区二区| 丁香7月婷婷| 伊人网免费视频| 婷婷尹人大香蕉免费| 日欧毛片久久| 人妻9117c| 97人人干| 日本性一区| 在线观看无码三级少妇| 日韩三级一区| 成人九九| 色狠狠 - 百度| 亚洲免费97免费| 四虎精品一区二区| 色综合网1| 中国熟女91| 日本高清免费一本视频在线观看| 日韩97超碰中文字幕| 国产精品在线一区二区| 一区二区三区不卡视频| 九九热精品| 99热日| 日韩亚洲国产视频| 蜜桃不卡一区二区| 黄色免费一级在线毛片| 亚洲 综合 欧美| 懂色aV一区二区天美传媒| 精品无码一区二区三区| 亚洲精品丝袜-不卡成人免费……| 物业黑人 AV一区| 亚洲色图欧美色图日韩色图| 9超碰免费| 高清国产无码av| 青青欧美在线| 麻豆三极片| 欧美亚性天堂| 亚洲色阁| 99热97| 一区二区高清视频| 亚洲国产精品乱码在线观看| 国产白丝网站| 熟妇在线视频一区二区| 亚洲综合伊人无码久久| 色色色综合| 大香蕉99999| 色婷婷五月天| 久久久999| 999久久久久久久精| 一起草三级AV电影在线观看| 不卡在线一区,精品一区二区三区中| 女同性恋久久| 伊人久久蜜月| 先锋影音av先锋一区| 少妇人妻无码| av一区二区三区四区| 97视频在线观看高清资源| 久久成年片色大黄全免费网站| 精品久久久久9999| 综合久| 日本黄色天堂| 人妻干天天| 欧美色三级片91| 大香蕉狠狠爱| 超碰在线国产| 午夜福利激情在线视频| 久久99999| 美国一区二区三区视频| 久久久96| 麻豆91熟妇人妻中文字幕茄子| 91操碰| 边做饭边操逼逼| 九九九免费视频| 欧美91精品国产自产| 丁香激情网| 日韩少妇无吗| www.91色| 日本人妻中文字幕| 亚洲日精品| 嗯嗯,好大,好爽,好骚| 欧美系列在线一区二区| 精品国产Av无码久久久伦古装| 久久曰曰| 全免费a敌肛交毛片免费| 久久久久久九| 男人天堂综合| 久热69九色熟妇97| 福利在线黄片| 久久五月天婷婷丁香中文字幕| 综合亚洲欧美| 国产91丝袜 在线播放| 国产五码丝袜屁眼| 九一综合精品视品av| 九九色婷婷| 国产做?爰片久久毛片?片美国| 尤物网站91| 小骚逼被操的爽不爽| 色综合潮| 欧美日韩色图片| 6080yy午夜理论三级一区二区三区无码| 一本一道波多野毛片中文在线| 色黄污美女啪啪啪免费网站| 大香蕉中文在线| 久久国产精品m码| 啊啊啊啊好疼视频| 色哟哟AV| 亚洲欲| 天天内射| 久久亚洲熟妇在线视频| 青青草在线视频人人想人人上 | 亚洲欧美综合区自拍另类| 久久久久九九九| 欧美亚洲丝袜人妻制服中文99| 98超碰欧美| 亚洲少妇自拍中文字幕懂色| 神马久久免费电影观看| WWW美腿丝袜香蕉中文| 加勒比久久av| 99这里都是精品| 青青草在线视频播放器| 亚欧操逼片在线观看 | 久久国产99精品72福利| 无码免费一区二区三区啪啪| 一区二区三区 丝袜 高跟 美腿| 五月丁香婷婷色| 久都青青视频| 91女神在线视频| 天美欧美国产| 国产激情视频一区区三区| 国产麻豆91欧美一区二区久久婷婷国产精品 | 国产免费永久精品无码| 任你草| 色人久久| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 一区二区三区在线日韩影院观看| 天天综合~91| 伊人97| 91人妻人人澡人人爽人人精品| 超碰97日韩| 国产白丝av| 人妻无一区二区三区| 在线综合 亚洲 欧美中文字幕| 人妻 丝袜美腿 中文字幕| www.99中文字幕| 思思热免费视频观看| 91欧美高清| 日韩 欧美 校园一区| 尤物视频新赏网鲜网色诱网| 欧美日韩欧美| 岛国大片国产| 日本亚洲熟女视频| 夜夜操91744565| 色天堂在线观看| 日本不卡在线二区三区| 亚洲熟妇一,二,三期| 久草婷婷| 99色悠悠| 日本ZZ高免费A级视频| 美女91在线| 国产精品探花视频| 日本 欧美 亚中文字幕| 亚洲性猛| 精品国产Av无码久久久伦古装| 97人妻免费中文字幕| 婷婷色婷婷| www被窝色com| 偷拍盗拍亚洲色图图片 | 九九视品黄色| 免费超碰97久久| 国产精品 视频| 在线性黄高清免费视频| 精品亚州18| 超碰色97| 静品嫩模一区二区| 少妇69中文| 91五十路| 干婷婷综合网| 另类视频在线| 97超碰人人模人人拍人人| 色色五月天激情| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 99色婷婷| 欧美线天码中字| 超碰美国| 五月花婷婷| 97爱啪| AV乱伦专区| 麻豆 欧美 日韩| 92大香蕉| 人人插人人搞人人操| 国产AV人人 夜夜人人澡| 婷婷色综合欧美日韩| 操美女高潮抽搐白浆| 日本最新1区2区3区| 无码人妻一区二区三区色欲aⅴ| 久久精品人体| 少妇天堂| 67914亚洲精品| 欧中美三级一区二区三区| 999岛国大片| 日韩精品怡红院| 乳欲人妻办公室奶水| 日日日啊啊啊| 亚洲男人综合| 亚洲精品久| 亚洲 欧美 综合 91| 久草视频观看视频在线| 国产亚洲精品自在线亚洲情侣| SUV一区二区在线看| 国产传媒操逼视频| 五十路熟女工口 | 91综合熟女| 日本福利社| 另类图片天天影视| 人妻少妇色综合| 色臀av| 一区二区三区精品黑丝白丝酒店对鸡 | 国产精品久久久亚洲第一牛牛_在线观看| 黄片色区软件| 啊啊啊啊,啊啊好多水| 亚洲黄色a级片| 一二区在线观看视频| 人妻熟女av国产网站| 日本幼女18+| 婷婷色婷婷| 欧美成人性爱视频在线播放 | 中文字幕三四区| 久久国产精品一级二级三级| av网站在线看| 欧美色997| 熟女字幕| 久久久精精精| 91骚妇| 国产性爱乱伦AV| 午夜精品久久久久久久久久久久久 | 盗摄 精品 另类 一区| 嗯嗯啊啊操我| 久久久久久久久久久久久久久久9| 国产99精品一区二区三区免费| 大香交| 99色色网| 久久男人精品| 插插综合网天天影视网| 四月丁香婷婷| 91香蕉视频在线观看免费| 欧美综合传媒| 精品久久人妻成人网| 天天肏天天干| 欧美 亚洲 91| www.婷婷| 国产福利小视频高清在线观看| 色综合 加勒比| 亚洲精品97在线| 免费观看的黄色的网站| 久艹日日日| 九九九精品一区二区无码| 在线观看一卡二卡| 国产精品精品系列在线观看| 嫩草91| 久草婷婷| 夜夜操狠狠操| 欧美操逼熟女| 美女久久久| 五月天AV资源| 97色视频在线| 欧美亚洲性爱一区二区| 欧美成人性爱视频免费观看| 日韩av无码网站| 豆1无夜无码| 97超碰国产亚洲精品| 国产夜夜艹| 日本污ww视频网站| 双插性欧美一二三区| 超碰碰97资源站| 伊人96在线| 亚洲 图片 欧美 色图| 天天做天天爱天天爽| 国产极品精品美女视频| 亚洲激情视频| 亚洲毛片久久| 国产久久久久影院老熟女| 中日韩久久人妻一区二区| 久久人人爽人人爽人人片Ⅴ| 亚洲性爱免费电影| 欧美极品美女aaaaaa级黄片| 欧美美女视频| 日夜精品| 999久久芭蕾| 美女骚尻视频| 亚洲综合99999| 97AV爱| 家庭乱伦网站国产| 飘花国产午夜精品不卡| 亚洲情色综合| 91亚洲欧美激情| 在线播放中文字幕| 日韩 欧美 国产 麻豆| 亚州久久9| 夜夜嗨AV一区天天| www.超碰在线| 日本色色视频网站| 亚洲欧美国产va在线播放频| 91亚洲情色| 中文字幕乱码在线| 欧色网址| 亚洲av青草久久一区二区| 久久老熟女| 欧美双插| 翔田千里无码一区| 成人五月天丁香激情综合| 日本孕妇一区二区视频操逼免费看| 九九九九九九九九九国产精品 | 精品一久久久| 2019AV天堂| 91 亚洲情侣偷拍 久久| 婷婷丁香一区二区三区| 一区二区三区成人| 玖玖97综合| 国产SV一线| 亚州色国| 欧美国产成人在线| 亚洲风情综合网| 欧美色亚洲色| 91精品91久久久久77777俄罗斯老妇姓x| 亚洲在线欧美| 欧美Ⅴ性爱| 一级黄色视频网| 国产亚洲深夜激情| 强奸乱伦免费网站| www..com操老师| 欧美成人性爱视频大全| 一区二区三区视频| 亚洲乱色视频一区、二区在线| aaa淫乱视频| 日韩中文9| 78超碰| 中国AAAAAA黄色片| 久久久免费的精品| 日韩亚洲中文字幕在线| 男人的天堂一区三区| 99热精品免费| 国产精品久久久视频| 校园春色综合香蕉| 久久啊啊| 日本三级A片网站com| 日韩AV无码中文一区二区| 日韩无码成人电影| 操B久久| 一卡二卡在线播放| 老熟女乱伦片| 国产成人精品亚洲日本| 日韩美一区| 欧美性视频二区三区| 色综合加勒比| 人人看人人爰人人操| 人妻少妇色综合| 四虎免费看黄| 2020中文字幕在线观看| 国产理论视频在线播放| 超碰碰碰碰| 一区二区三区色综合| 欧美亚洲在线| 在线欧美69V免费观看视频| 婷婷五月天补不补| 亚洲人久久久网| 国产精品人妻无码久久久互動交流| 九月激情婷婷| 精品熟女一区=区三区| 性高潮久久久| 人人看人人插| 欧美在线官网| 夫妻日逼| 亚洲AV噜噜狠狠网址蜜桃动漫| 久久大香蕉手机高清| 大香蕉在线SuP| 久久久久久电影| 91在线美女| 天天综合,91入口| 93人人操人人| 啊好大好舒服| 九九九免费视频| 九九在线视频| 另类专区加勒比| 无遮挡一级毛片视频免费的| 天美国产三级传媒| 色噜噜人妻av中文字幕| 日韩 欧美 另类 人妻| 老鸭窝亚洲毛片| 三级色影综合网| 99操99| 久久久啊啊啊| 日本在线激情一区二区三区| 草伊人高潮喷水超碰| 国产主播福利| 97欧美精品综合| 奶水 人妻 哺乳 在线| 九九亚洲视频| 啪啪啪男女亚洲中文字幕99| 女人天堂AV五区在线| 亚洲毛片基地专区| 九九色影院| 91亚洲网站| 亚洲.欧美.丝袜.中文.综合| 少妇久久久免费| 欧亚在线视频| 亚洲精品九九九九九九| 日韩人成网站在线播放| 久久↗↗| 成视频在线观看免费看| 天天综合网亚洲综合网| 久久精视频美日韩在线视频| 亚州高清色综合| 国产九九九九九九九九| 91亚洲丝袜熟女| 中日韩欧美精品无码AⅤ一区二区| 最新av在线| 综合五月婷婷亚洲一区| 999熟女精品| 日本一级一级一级一级| 欧美熟妇色| 欧美日韩人人精品| 欧美性爱91| 涩涩久久精品| 日本三级日本三级99| 天堂在线一区二区| 日韩人妻中文视频| 91色欧美| 长长久久曰曰夜夜成人网| 亚洲无码com| 校园春色中文字幕AV| 色欲无码人妻日韩欧美精品| 欧美精品,四区。五区| 日本人妻A片成人免费看片| 欧美色图校园春色| 亚洲日本男人天堂网| 手机在线中文字幕国产| 久湿久久| 色欧美天天| 97久久精品| 天天综合网入口~91| 国产一区二区啪啪视频| 射综合网| 精品美女少妇一区二区三区| 人人色人人操在线| 日韩久草| 欧美制服网站美腿丝袜| 日本免费人成视频播放120秒| 国产美女91视频| 日本国产高清色www视频在线| 欧美成人精品一区| 怡红院怡春院| 一区三区啪啪| 亚州熟女乱伦| 色老久久| 久久久久国产亚洲一区欧美色图日韩| 久久91视频| 亚91网| 99精品久久久久久| 荡小穴在线观看| 能在线播放的国产三级| 欧美激情专区| 亚洲日韩97| 91国产精品熟女| 国产97色在线| 亚洲囯产精品女人久久久| 桑老女人九区| 91精品国久久久久久无码| 日韩乱码Av| 强奸国产在线| 黄片视频观看| 黄aaaaaaaaaaaaaaaaaa色网站| 亚洲中文字幕av| 日韩美女,国产传媒,视频一区| 五月丁香六月婷| se01国产在线视频| 日韩肏逼视频| 日曰骚久久精品| 青草香蕉网| 亚洲精品97在线| 六月婷婷五月丁香| 天堂а√在线最新版在线| 日韩无码极品| 98久久超碰| 人妻在线大香蕉| 日本不卡三级网在线播放| 九九热精品| 懂色天天爱天天日天天射天天澡| 99人妻碰碰碰久久久久禁片| 天天久久| julia ann久久| 精品中文一区二区| 国产乱码精品久久久久久| 加勒比大香蕉视频在线| 在线观看中文av字幕| 黑人白女精品一区| 国产真实子伦对白| 九九九九精品九九九九| 后入国产| 国产伦精品| 天天综合网亚洲综合网| 啊啊啊不要嗯嗯在线观看| 精品国产国产AV| 欧美内射少妇| 日韩精品熟妇| 欧美 亚洲 大香| 91美女中出| 我爱大香蕉| 亚洲 国产 精品一区| 正在播放国产精品一区| 看免费一级在线播放毛片| 久草成人影片| 精品久久在线区一区| 青青操青娱乐| 欧美 亚洲 制服 精品| 精品一区96| 97超碰美国| 嫩草 人人网精品| 久久99999| 婷婷另类小说| 91超碰在线播放| 欧美在线|亚洲| 女人香蕉久久毛毛片精品| 国产日韩中文字幕欧美| 97国产|免费| 久操免费在线|