色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

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

Delphi直連MySQL:libmysql.dll原生調(diào)用實(shí)戰(zhàn)指南 簡(jiǎn)介本資源是面向Delphi中高級(jí)開(kāi)發(fā)者的技術(shù)實(shí)踐包聚焦于繞過(guò)OLE DB、直接調(diào)用MySQL原生客戶(hù)端庫(kù)mysql.dll實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接與操作的核心方案。適用于需提升數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)性能、規(guī)避Windows平臺(tái)中間層依賴(lài)、或定制輕量級(jí)數(shù)據(jù)訪(fǎng)問(wèn)層的桌面應(yīng)用開(kāi)發(fā)場(chǎng)景。壓縮包共53個(gè)文件含6個(gè)關(guān)鍵Pas單元如mysql.pas封裝DLL接口、4個(gè)DPR主程序覆蓋不同Delphi版本、4個(gè)DFM界面文件、32個(gè)HTML字符集文檔詳述cp1251、latin1、utf8等編碼適配方案以及ThreadDemo多線(xiàn)程安全示例和StmtDemo預(yù)編譯語(yǔ)句實(shí)踐整體僅87KB結(jié)構(gòu)緊湊、即拿即用。已有432人學(xué)習(xí)下載讀者可直接獲取完整可運(yùn)行的Delphi工程、跨編碼環(huán)境的字符集處理范例、線(xiàn)程安全連接管理邏輯以及mysql_win32.inc等平臺(tái)適配頭文件快速掌握原生API集成要點(diǎn)與典型錯(cuò)誤規(guī)避方法。1. Delphi 直連 MySQL繞過(guò) OLE DB 的mysql.dll原生調(diào)用方案為什么老項(xiàng)目還在用它你手頭有個(gè)運(yùn)行十年的 Delphi 7 工業(yè)監(jiān)控系統(tǒng)數(shù)據(jù)庫(kù)從 Access 換成了 MySQL但老板明確說(shuō)「不準(zhǔn)裝任何額外服務(wù)不準(zhǔn)改架構(gòu)更不準(zhǔn)碰 OLE DB 或 ADO——那玩意兒在工控機(jī)上一啟動(dòng)就藍(lán)屏」。這時(shí)候mysql.dll就不是懷舊彩蛋而是救命稻草。它不依賴(lài) COM、不注冊(cè)組件、不走 Windows 數(shù)據(jù)訪(fǎng)問(wèn)層UDA直接通過(guò) C API 調(diào)用 MySQL 客戶(hù)端庫(kù)把 Delphi 的THandle和PAnsiChar硬焊進(jìn) TCP 連接握手流程里。這不是“推薦方案”而是某些嵌入式環(huán)境、老舊 WinXP 設(shè)備、無(wú)管理員權(quán)限產(chǎn)線(xiàn)終端上唯一能跑通的路徑。它適合三類(lèi)人維護(hù)存量 Delphi 6–2007 項(xiàng)目的工程師、需要零依賴(lài)部署的現(xiàn)場(chǎng)實(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)所有直連方案都依賴(lài) MySQL 官方 C 客戶(hù)端庫(kù)。但注意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()對(duì)ftBlob類(lèi)型的參數(shù)綁定行為與原生libmysql.dll不一致會(huì)觸發(fā)ER_BAD_NULL_ERROR即使字段允許 NULL。實(shí)測(cè)驗(yàn)證在 Delphi 2007 MySQL 5.7.32 組合下libmysql.dll來(lái)自 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 對(duì) 5.7.x8.0.x 對(duì) 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請(qǐng)用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ì)亂碼、長(zhǎng)連接會(huì)超時(shí)斷開(kāi)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中文全變問(wèn)號(hào) MySQL.mysql_options(mysql, MYSQL_SET_CHARSET_NAME, PAnsiChar(utf8mb4)); // 必須設(shè)置否則 Windows 下 DNS 解析超時(shí)長(zhǎng)達(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ù)說(shuō)明CLIENT_PROTOCOL_41啟用 MySQL 4.1 協(xié)議含密碼哈希升級(jí)Delphi 2007 必須開(kāi)啟否則mysql_real_connect()返回nilCLIENT_MULTI_STATEMENTS允許一次執(zhí)行多條 SQL用;分隔對(duì)批量導(dǎo)入至關(guān)重要MYSQL_SET_CHARSET_NAME的值必須是utf8mb4非utf8否則 emoji 和四字節(jié) UTF-8 字符存不進(jìn)去。3. 查詢(xún)執(zhí)行與結(jié)果集解析從mysql_store_result()到PAnsiChar字段提取的完整鏈路3.1 同步查詢(xún)執(zhí)行mysql_query()的返回值語(yǔ)義與錯(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ù)庫(kù)不存在 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無(wú)結(jié)果集但mysql_affected_rows()仍可獲取影響行數(shù)。這是初學(xué)者最常踩的坑以為沒(méi)返回結(jié)果就是失敗。3.2 結(jié)果集獲取mysql_store_result()與mysql_use_result()的抉擇Delphi 場(chǎng)景下必須用mysql_store_result()。原因有三mysql_use_result()是流式讀取要求客戶(hù)端持續(xù)調(diào)用mysql_fetch_row()直到返回nil期間不能執(zhí)行其他查詢(xún)——這與 Delphi 的TDataSet架構(gòu)沖突mysql_use_result()在網(wǎng)絡(luò)中斷時(shí)無(wú)法重試而mysql_store_result()將全部結(jié)果緩存在內(nèi)存后續(xù)解析完全離線(xiàn)Delphi 7 的AnsiString內(nèi)存管理與mysql_use_result()的內(nèi)部緩沖區(qū)生命周期不匹配易觸發(fā)訪(fǎng)問(wèn)違規(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 語(yǔ)句無(wú)結(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ù)庫(kù)字段為latin1必須用RawByteString保持原始字節(jié)否則中文變亂碼。3.3 字段元數(shù)據(jù)解析mysql_fetch_fields()提取列名與類(lèi)型僅靠mysql_fetch_row()無(wú)法知道哪一列是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_; // 類(lèi)型常量FIELD_TYPE_LONG, FIELD_TYPE_DATETIME 等 end; MySQL.mysql_free_result(result); end;類(lèi)型映射表關(guān)鍵字段fields^[i].type_值對(duì)應(yīng) MySQL 類(lèi)型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 直連翻車(chē)的真實(shí)場(chǎng)景與血淚解法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來(lái)自 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í)長(zhǎng)并改用分頁(yè)查詢(xún)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線(xiàn)程局部存儲(chǔ)而 Delphi 7 的FreeLibrary()未正確清理 TLS 槽位。解決永不調(diào)用FreeLibrary(MySQL.Handle)。將libmysql.dll生命周期綁定到進(jìn)程——程序啟動(dòng)時(shí)LoadLibrary退出時(shí)讓 OS 自動(dòng)卸載。實(shí)測(cè)強(qiáng)行FreeLibrary在 WinXP SP3 下 100% 觸發(fā) AV。5. 連接池與長(zhǎng)連接保活在無(wú)TADOConnection的世界里維持穩(wěn)定心跳5.1 為什么 Delphi 原生沒(méi)有連接池TDatabase的致命缺陷Delphi 7 的TDatabase組件底層仍走 BDE 或 ODBC無(wú)法接管libmysql.dll的裸指針。而手動(dòng)實(shí)現(xiàn)連接池必須解決三個(gè)問(wèn)題連接復(fù)用避免每次查詢(xún)都mysql_init()→mysql_real_connect()→mysql_close()TCP 握手開(kāi)銷(xiāo)太大失效檢測(cè)MySQL 的wait_timeout默認(rèn) 28800 秒會(huì)讓空閑連接被服務(wù)端主動(dòng)斷開(kāi)下次mysql_query()直接 AV線(xiàn)程安全libmysql.dll的 C API 函數(shù)不是線(xiàn)程安全的同一PMySQL句柄不能跨線(xiàn)程使用。5.2 輕量級(jí)連接池實(shí)現(xiàn)基于TThreadList與心跳檢測(cè)我們不造輪子只封裝最小可用單元。核心是TMySQLConnection類(lèi)管理單個(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;心跳檢測(cè)邏輯mysql_ping()是唯一安全的存活檢測(cè)方式。它發(fā)送一個(gè)COM_PING包服務(wù)端響應(yīng)OK包不消耗查詢(xún)配額。比SELECT 1更輕量且不會(huì)因慢查詢(xún)?nèi)罩緷M(mǎn)而失敗。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. 無(wú)空閑則新建不超過(guò)上限 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()不阻塞無(wú)連接時(shí)返回nil由業(yè)務(wù)層決定重試或報(bào)錯(cuò)ReturnConnection()僅更新時(shí)間戳不驗(yàn)證連接狀態(tài)——驗(yàn)證交給后臺(tái)CleanupIdle線(xiàn)程CleanupIdle()每 30 秒掃描一次對(duì)LastUsed超過(guò)FIdleTimeout的連接調(diào)用conn.Free。5.4 生產(chǎn)環(huán)境?;罴记蒻ysql_options()的三個(gè)隱藏參數(shù)除了前文提到的超時(shí)設(shè)置這三個(gè)參數(shù)是工業(yè)現(xiàn)場(chǎng)的“后悔藥”參數(shù)值作用適用場(chǎng)景MYSQL_OPT_RECONNECTPointer(1)連接斷開(kāi)后自動(dòng)重連網(wǎng)絡(luò)抖動(dòng)頻繁的車(chē)間 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()使用。單純開(kāi)啟它當(dāng)連接因wait_timeout斷開(kāi)后mysql_query()仍會(huì)返回錯(cuò)誤必須手動(dòng)調(diào)用mysql_ping()觸發(fā)重連。所以我的習(xí)慣是每次mysql_query()前先if not mysql_ping() then reconnect。6. 從調(diào)試到上線(xiàn)一份可直接粘貼的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)必須核對(duì)的落地動(dòng)作項(xiàng)目檢查方式不通過(guò)后果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 用戶(hù)權(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多線(xiàn)程下AnsiString內(nèi)存分配沖突隨機(jī) AV6.3 最后一條鐵律永遠(yuǎn)在Finalization中清理而不是OnClose我見(jiàn)過(guò)太多 Delphi 工程師把mysql_close()放在窗體OnClose事件里結(jié)果用戶(hù)點(diǎn) × 時(shí)程序已開(kāi)始析構(gòu)全局變量MySQL.mysql_close調(diào)用的是野指針。從那以后我每次寫(xiě)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 層。連接的生命周期必須由對(duì)象管理而不是事件驅(qū)動(dòng)——這是 Delphi 7 直連 MySQL 能活過(guò)五年不翻車(chē)的底層契約。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久久久久裸体| 99无码狠狠久久| 少妇熟女视频一区二区三区| 青青青国产手线观看视频2| 两性色网| 日本免费不卡二区| 激情婷婷黑人91| 久久婷婷五月综合| 亚洲人妻一区二区三区| 日韩啪啪啪视频| 91成人亚洲色图| 91精品国产91久久青草 | 国产高潮AA片免费看| 亚洲日韩肥臀视频在线观看| 性欧美第一页| 色婷五月| 国产精品农村妇女精品| 五月天综合在线| 青娱乐 成人娱乐在线| 豆1无夜无码| 青娱乐国产剧情av一区| 无码9区| 丝袜美女诱惑 91 视频| 日韩无码精品综合久久| 久久国产精品熟女人妻| 99国产在线 精品 视频| 大乔未久88一区| 成人乱人伦一区二区| 九一综合精品视品av| 97天堂| 91五月天| 免费无码国产精品v片在线观看| 亚洲精品 大香蕉| 人妻夜爽夜夜爽| 精品人妻一区二区三区-国产| 色爱天堂| 成人女人国产| hd成人一区二区在线| 黑丝制服中文字幕| 粘花网06av视频| 97超碰人人模人人拍人人| 亚洲少妇色图自慰直播| 精品精品精品| 国产精品免费视频人成| 欧美亚洲91| 天堂av2019| 丁香五月综合| 日韩欧美大片免费高清啪啪| 人人澡人人干| 色香综合天天影视综合 | 女生91网站| 嗯啊不要啊在线 | 大香蕉啪啪啪| 久伊人网78| 成人av动漫在线观看| A级片日韩欧美国产欧美视频精选观看 | 看黄片视频免费| 亚洲毛片基地专区| 日本二区不卡| 99精品丰满人妻| 天天操综合网| 久久伦理视频久久大香蕉视频| 国产精品亚洲色婷婷久久久| 久久久久久久9| 日本熟妇人妻中出视频| yellow网站免费观看日韩高清无码| x97av| 日韩久久三区| 玖玖在线视频| 国产一级片| 欧美网站免费| 操逼日韩无码| 婷婷爱五月| 成人丁香五月| 偷窥自拍亚洲色图| 中出789在线视频| 美女97超碰| 99操| 91天天c| 国产成人天堂| 中出在线视频| 亚洲综合色男人网| 日韩精品一区二区三区色欲| 国产午夜精品一区二区三区牛牛| 欧美天堂日韩三级国产传媒| 理论久久婷婷网8| 人妻天天爽| 精品人妻一区二区三区蜜桃视频| 久久久久久久9| 成人av性爱电影在线观看| 国产一级高跟丝袜| 2021国产成人精品久久| 熟女五十路一区二区三| 国产成人综合网| 日韩女优在线| 青青草国产一区二区三区| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 国产aⅴ无码片毛片一级网站| 在线综合 亚洲 欧美中文字幕| 欧美性爱三区二区| 少妇500双飞99| 国产精品农村妇女| 久久一级无码精品毛片6| 91爆操视频| 欧美三级一级| 久9精品| 九热中文字幕| 久久亚洲精品成人av| 色老汉色| 精品人妻视频入口| 日韩中字av一区| 久欲AV| 少妇熟女1区2区3区| 欧美极度丰满熟妇hd| 中文字日本乱码| 九九九九九九九九九五码| av橘色网站| 亚洲人妻久久| 狠狠操一区二区| 亚洲精品少妇| 青青草伊人久久| 91欧洲国产成人久久精品网站| 开心五月深爱五月| 毛片99-全集电影手机免费观看完整-B029AV | 大香网伊人久久综合网eew| 高清无码91| 欧美性爱免费短视频| 91 刺激在线| 欧美九一精品久久久熟妇| 午夜免费福利视频一区| 国产乱子伦久久精品综合一区二区三| 五月天婷婷久久| 亚洲无码日韩电影| 欧美综合第一| 无码精品蜜桃一区二区三区ww| 国产 大胆 对白| 国产性爱乱伦AV| 人妻出轨一区二区三区| 亚欧高清在线| 国产精品麻豆免费视频| 国产精选视频| 亚州色图欧美| 黄在线| 亚洲一区二区av| 97精品一二区| 91蜜臀在线久久久久| 色婷婷五月天| 五月亭亭六月丁香| 久久精品熟妇丰满人妻99| 男人的天堂kva| 亚洲AV乱码专区国产噜噜亚洲 | 91bbbbbb| 欧美大战久久久伊人| 囯产操逼片| 欧美日韩亚洲天堂| 91国产美女丝袜足交精品视频| 无码137片内射在线影院| 宗合情欲网| 综合欧美日韩在线观看| 亚洲国产精品无码AV久久久| 99热这里只有精品18| 久久伦理视频久久大香蕉视频| 久久97资源 网| gogogo免费高清看中国国语| 欧美精品黑人猛交高潮| 欧美色图自拍| 国产精品不卡少妇白| 五月婷婷六月丁香| 亚洲色堂免费视频| 国产精品肉丝自拍| 中文字幕精品丝袜| 日韩av色图综合| 日韩激情视频| 欧美在线色| 红桃视频高潮| 国产精品suv一区| 无码久| 久久精品91| 亚洲影院成人| 夜夜躁狠狠躁日日躁av| 欧美v亚洲v综合v国产v妖精| 1769成人国产精品视频| 在线五区| 又粗又长又大国产不卡| 久久精品 六十路 熟女 欧美| 精品综合久久久久久97| 69久久久久久久久久久久久| 九热超碰| 日韩有码 一区二区三区| 亚洲最新Av| 亚洲欧洲综合视频在线| 久久av网| 日韩熟女精一区二区三区不卡| 91bbb| 视频国产精品未满十八禁止在线观看| 久久99热这里只频精品6学生| 国产精品欧美激在线| 1769国内精品视频| 99e久久国产精品| 老熟女综合网| 99久在线精品99re8热视频在线| 尹人大香蕉视频在线| 欧美亚洲另类在线蜜桃| 久久av无码| 欧美懂色综合网| 精品少妇人妻一区二区三区| 九九九九免费高| 久久免费精品96| 欧美久久婷婷| 欧洲自拍色图gif在线| 精品97久久综合| 一区麻豆 高清中文字幕| 伊人色综合网| 久久草草欧美精品| 日韩中字av一区| 亚洲天堂,男人| 亚洲国产成人高清在线| 国产欧美日韩女同性恋ww喷水精品| 黑操B| 国产成人网址| 国产亚洲色婷婷久久99精品91| 最新国产精品久久精品| 免费黄色A片| 男人的天堂一区三区| 青娱乐亚洲自拍| 日本熟女中文字幕一区| 中文字幕一区二区免费在线| 乳欲人妻办公室奶水| 人妻偷拍一区二区三区| 强奸国产在线| 国产无马视频| 亚洲一区二区三区AV无码 | 国产精品suv一区| 香蕉免费一区二区三区不读| 久久久男人的天堂| 青青草AV色| 欧美日韩国产精品久久色婷婷| 色网亚洲人| 精品一区二区三区18| 欧美性爱第1 页| 国产在线观看一区二区三区| 95自拍视频在线观看| 性色av蜜臀av色欲aV| 最新啪啪视频| 51一区二区三区| 日日夜夜干| 欧美天天综| 热久久国产精品视频大陆精品| 操淫穴亚洲五月丁香| 九99久久| 老司机福利青青草| 女人高潮抽搐喷水视频网站| 毛片视频白嫩| 亚洲图片 激情小说| 中文字幕欧美精品亚洲日韩蜜臀| 欧美激情专区| 懂色天天爱天天日天天射天天澡| 日韩av乱伦| 欧美第一页性| 蜜臀th| 欧美中文字幕精品人妻| 黄片国产精品一区二区| 日本福利社| 国产天美传媒精品| 最新日本中文字幕| 夜夜嗨一区二区| 美女裸体麻豆天美蜜桃91| 91天天综合在线观看| 国产日本一区二区三区蜜臀在线观看| 综合久久中文字幕综合日韩精品| 夜夜操天天肏| 91高潮| 欧美一区二区三区蜜桃| 青青草手机在线免费观看| 91精品免费| www.婷婷六月天| 五十路熟女工口| 91狠狠综| 丁香激情网| 亚洲日本天堂| 日韩AV噜噜噜一区二区三区四区| 日本激情免费大片| 日本特黄f c2| 国产精品夜夜| 色好看av| 国产偷拍自拍在线视频| 综合久久9| 91丨熟女丨丰满熟女| 久久久99久9| 国产中文字幕在线观看| 曰韩操B| 成人情色一区二区| 精品九区| 亚洲经典啪啪| 亚洲中文sv| 欧美天天干| 无码日韩网站| 精品成人女人久久| 亚洲蜜乳av| 天天综和| 国产一二三福利视频网| 五月天激情小说| 亚洲AV不卡在线观看| 91大神精品长腿在线观看网站| www.99热| 1024精品在线| www.婷婷| 91黄站| 久久伊人大香蕉| 东京热大香焦| 无色无码| 亚洲97网站| 国产精品亚洲一区二区三区四区| 中文字幕av片| 色人久久| 亚洲欧美不卡线| 国产一区96在线| 蜜臀99久| 久久久影院| 国产精品一区二区久久精品| 风月影院男女十八禁| 操逼国产免费| 亚欧美色图| 91在线无码精品秘 软件| 欧美日韩国产电影| 亚洲精品视频在线播放| 久久精品人妻一区| 男人的天堂2000| 天堂中文资源在线bt| 天天综合网合集91| 亚洲伊人久久精品狠狠在线| 在线无码视频| 久久女人| 欧美第38页| 日韩免费大片一级播放| 91亚洲综合在线| 国产有码一区| 国产高清26uuu| 欧洲大香蕉| 五月丁香色综合| 妇女性内射冈站HDWWWCOM| 青青草啪啪网| 丁香五月激情综合| 天天干天天燥| 亚洲一区中文字幕| 亚洲大色堂| 日本肏逼视频在线观看| 超碰地址久久| 中国小夫妻勾搭露脸淫荡对白| 91成人精品在线播放| 天天噜| 91久久18禁| 最近的最新的中文字幕视频| 国产精品点击进入在线影院高清| 九9精品| 色天使大香蕉| 日韩精品区二区三区不卡| A级在线视频| 日日嗷| 啊啊啊好湿久久| www.超碰在线| 91黑丝在线播放| 亚洲中字幕日本一区二区三区 | 91亚洲欧美色图| 欧洲一级性爱视频在线观看| 精品人妻免费观看| 日本一线产区和二线产区伦理片| 91n美女视频| 天天综合网站| 国产 无码 一区二区| 大香蕉一级黄色片久久| 男生通女生屁股| 偷拍综合亚洲| 啊啊啊不要啊啊受不了了视频在线 | 久久精品99| 91色爽欧美| 99精品在线观看| 欧美老妇曰批的视频| 中文字幕日韩精品久久| 欧美91在线| 国产久久天堂资源| 99热这里只有精品1| 无码久| 天美欧美国产| 操逼999| 天天综和| 99久在线精品99re8| 综合激情五月天| 欧美黄片欧美黄片xxx| A级毛片在线看免费| 国产美女高潮| 快灬快灬 一下爽蜜桃在线观看| 无码粉嫩白虎一线天b区| 黄久在线| 蜜臀在线看片| 99rre在线精品99re8| 老色鬼成人精品视频下载大在线观看| 久久久99999久网站| 久草新免费| 爱爱动态试试看6 0秒| 日韩久久艹| 国产美女激情| 超碰天天操| 97精品国产精品免费观看| 天天综合网1| 一区二区三区在线日韩影院观看| 青青草华人在线欧美在线| 欧美激情黑人| 大香蕉线| 91肉片| 在线观看高清AV| 在线观看亚洲专区| 免费毛片在线播放| 日本三级大片| 中文字幕在在线观看网站| 另类视频在线| 四虎av在线| 97超碰超碰| 中文字幕天堂在线| 日日夜夜精品视频| 国产高清MV操逼视频| 亚洲成?V人片在线观看福利| 黄页18禁| 天堂射| 日韩小电影| J?P?NESEHD熟女熟妇伦| 大香蕉www.超碰| 亚卅熟女乱色| 中文字幕丝袜美腿| 999色欧美中文字幕| 国产精品乱码久久久| WWW.操逼.COM| 亚洲一欧洲中文字幕在线| dy888午夜老子影视达达兔| 91伊人久| 99综合视频一体| 91麻豆天美传媒HD| 美女爽爽爽刺痛洞洞| 91第一页| 亚洲色图欧美色图日韩色图| 亚洲春色激情小说| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 免费综合亚洲中文| 秋霞男人网| 夜夜高潮夜夜爽高清视频一| 欧美色亚洲色| 芊芊操逼视频无码| 亚洲精品久| 60秒免费视频| 国产一区二区三区白丝| 91大胆欧美| 爱爱久久| 久久精品国产精品一区| 激情看片网站| 国产精品不卡一区二区三区| 激情综合网亚洲| A 在线网址| 男人的天堂2018东京热啪啪啪| 中文久久一区| 国产传媒av天美传媒在线| 欧美系列在线一区二区| 日本亚洲vr欧美不卡高清专区| 蜜桃视频啊啊啊啊| 亚洲国产欧美另类自拍| 97激情97激情| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 久久久精品电影| 91碰碰| 中文子幕一二三| 免费看片黄| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 欧美日韩国产精品久久色婷婷| 翔田千里无码一区| 人妻天天爽夜夜爽精品2| 亚洲色图欧美色18直播在线| 久久久久9| 中文子幕一二三| 一起草日韩| 中国小夫妻勾搭露脸淫荡对白| 色综合av综合久久| 国产一区二区三区中文字幕| 91综合无码| 黄片www.| 2020中文字幕在线| 六月丁香五月婷婷| 五月天亚洲色图| 亚洲国产欧美中日韩成人综合视频| 中文字幕女同在线| 色网在线视频观看免费| 日韩精品99久久久久久中文字幕 | 综合亚洲欧美精品日韩?v| 97超级久久强资源| av网站免费线看| 绯色AV粉色AV蜜臀AV| 超碰免费人妻人人| 日日夜夜青青草母狗| 男人的天堂午夜av| 操淫穴亚洲五月丁香| 一级久久性爱视频| 91 综合网| 这里只有精品视频在线| 69精品| 1024亚洲中文字幕久在线看片你懂的| 91 偷| 国产欧美日韩女同性恋ww喷水精品| 亚洲欧美不卡线| 国产一级作爱毛片| 精品人妻一区二区三区不卡断 | 日韩 国产 欧美自拍| 久草综合京东| 韩国三级一线观看久| 蜜臀AV成人精品蜜臀AV久久| 久久这里是精品| 嫩草 我啊~嗯~在线| 综合一区中亚洲国产成人综合精品| 九九九九欧美| 欧美夜夜狠| 欧美真人抽搐一进一出gif| 真实高潮91| 熟女乱伦A| 99re在线精品78| 久久久久国产无av| 少妇高潮九九九九| 无码男人天堂| 欧美亚洲综合色| 中文字幕日韩电影人妻| chaopen97久久| 日韩乱码Av| 国产AV精久久| 熟女人妻精品一区二区视频 | 欧洲久久一二线| 久神马| 欧美三级不卡| 欧美性爱十八禁| 日韩强奸av| 亚春色色| 欧美性生活内射| 夜夜嗨一区二区| 欧美成人A天堂片在线观看| 99999re| 综合网亚洲1| 欧美亚男人的天堂| 欧美久热| 国产亲戚伦亲在线| 91av一区二区在线观看| 综合色久欲| 亚洲自拍欧美国产首页网曝| 欧美日韩色图片| 欧美日产国产在线成人第一区| 欧美熟妇色| 日夜尻逼网| 清清草影| 日韩精品一区二区三区四虎影视| 日韩不卡a级视频专区| 高清国产精品福利网站| 国内一级精品| 久久大香蕉97| 亚洲狠狠入| 99精品热| 久久夜嗨| 99精品网站| 精品久一区免费| 91一区二区| 五月天婷婷色| 成人看片网站| 久久婷婷六月综合| 97碰在线视频| 啪啪啪综合网| 色婷婷丁香五月天| 久久久久9999| 人妻少妇久久久| 国产精品99久久久www| 日本Xx性爱| 日韩激情电影中文字幕| 思思热国产高清| 17c嫩草51久久91嫩草| 屁股久久久久久| 久久精品老司| 午夜精品久久久久久久| 久久精品女同亚洲女同13| 成人网欧美风情| 麻豆精品A片免费观看| 亚洲丝袜B诱惑| 一区二区三区日韩欧美 | 老司机免费视频在线91| 日日干日日操五月天伦理视频| 久久久久久夜夜夜夜夜| 玖玖爱综合| 日韩9999| 亚洲偷拍欧美激情| 凹凸 69堂 在线播放| 91天美免费| 天天久久久久久| 9久热这里只有精品| 欧洲精品一级二级精品综合视频综合| 欧美色狠| 欧美日韩不卡a片| 国产树林里野战在线看| 黄污污污污| 久热免费视频| 欧美色图人妻| 天天干人人乐| 久久久国产av美女私房| 岛国视频一二三区| 99碰碰| 日日日啊啊啊| 色哟哟精品1精品2| 91丝袜在线观看| 日本东京热加勒比久久| 激情五月丁香五月| 丁香六月激情| 欧洲亚洲综合| 百度百度日本操逼| 国产精品视频白浆免费| 2020视频1区2区3区| 久久超碰、| 91综合在线| 91久久精品国产| 精品人妻一区二区三区夜夜| 夜夜操青青草| 亚洲av强奸乱伦| 美日韩一卡二卡三卡免费人妻精品| 伊人伊人LD| 日本亚欧爱爱| 国产一区二区成人av在线播放| 亚洲一本大道中文字幕无码在线| 男人的天堂2010| 欧美少妇高潮久久91| 欧美se综合| 国产日韩欧美亚洲精品95| 亚洲色五月| 亚州日韩97| 永久电影三级在线观看| 日韩在线一区二区| 麻豆视频test| 中文字日本乱码| 日本欧美不卡| 欧洲熟妇xxXx欧美老妇裸体| 欧美老熟另类| 另类小说欧美激情校园春色| 成人网站 免费观看| 免费9 1久久| 清纯唯美亚洲综合| 婷婷色婷婷| 色情婷婷久久五月天| 小视频国产| 国产超碰人人操| 九九九九免费高| 岛国在线国产| 99re不伦| 亚欧无码线免费观看视频| 97久久视频| 亚洲在线综合| 亚洲AV无码国产精品久久久久| 国产精品高潮久久AV| 国产精品人妻免费精品| 最新加勒比丝袜在线| 久久精品区| 超碰在线看| 日日夜夜骚| 亚洲美女精品九九视频| 色五月婷婷色| 天堂综合网| 免费A V在线播放| 99热国产| 欧美十八禁在线看| 日天天九九天堂666| 在线视频日韩欧美国产| 四虎免费在线播放| 色色色五月婷婷| 日比av无码| 天天日天天舔| 亚洲一区二区在线观看91| 高清无码 国产精品| 韩国女主播青草福利视频| 超碰成人人人爽人人爽| 亚洲男人的天堂一区二区| 成全动漫视频观看免费下载| 97香蕉人人乳| www.av在线视频| 久久九精品| 日韩激情啪啪| 999精品女人| 国产女上位好爽在线| 午夜小电影在线插入淫高潮| 久久少妇视频| 亚洲成人久久一区二区| 欧美少妇高潮| 少妇高潮99p| 东京热视频网| 久久国产999| 狠狠爱综合| 激情综合网激情综合| 中文字幕十五区| 久久亚洲精品成人av| AV女优男人的天堂| 亚洲淫乱骚妇AV| 日本三级R| 啊啊啊好想要| 亚洲熟妇综合久久久久久| 亚州免费啪啪视频| 男同专区一区二区三区在线| 91jk色拍| 精品久久99| 国产精品不卡一区二区电影| 超碰到97情色| 国产熟码AV| 中文字幕视频在线观看一区二区| 国产无码精品成人| 亚州高清AV| 老熟女熟妇| 丁香五月久久| 国产性久久久| 欧美色女人| 国产精品色| 欧美狠狠弄| 操操碰| 377p欧洲日本亚洲大胆| 欧美激情专区| 亚洲在高跟鞋自慰久久在色线| 国产免费一区二区在线A片视频| 日韩兔费看黄片| 狠狠操狠狠燥| 9久久美女首页| 久久久久成人蜜桃精品| 能直接看AV的网站| 夜夜爽夜夜爽| 亚州五月| 97在线资源| 少妇500双飞99| 久久熟女人| 五月天婷婷综合| 成全在线观看免费观看| 亚洲春色一区二区三区| 亚洲成人ab| #NAME?| 色妺妺在线视频| 天天日夜夜爽| 免费在线黄片视频| 丝袜美腿亚洲| 色九久| 欧美 亚洲精品首页| 97久久精品不卡| 97超碰色五月| 日本久久久久久久久| 久热91| 亚洲天堂热| 亚卅熟女乱色| 久操大香蕉手机视频在线看| 99操视频| 国产高潮AA片免费看| 久久精品亚洲成a人天堂| 无码一区免费在线不卡| 青春草莓视频在线观看网址| 亚州综合在线| 亚洲欧美电影| av黄图片在线观看| 国产成人无码a| 久久一二三四| 97久久精品| 日本操逼视频在线| 97av在线观看| 午夜国产综合视频在线观看| 亚洲欧美在线观看无码| 可免费观看的av毛片中日美韩 | 男女性扦B| 嗯嗯啊啊好大好爽| 人妻丰满熟妇av无码区蜜桃| 久久久三区二区一区| 久久久久久久91| 东京热天堂网| 久久加勒比| 国产后入| 思思视频免费看网站| 国内精品久久人妻性色av| 中日韩免费看男女操逼大全| 婷婷干黄色| 成人性爱视频在线看| 久久精品28| 日韩一级二级三级免费看完整版| 久久老熟女| 操逼操2| 国产精品毛片?v一区二区三区| 黄色视频特级毛片| AA丁香综合激情| 激情五月婷婷| 亚洲码和欧洲精品激情系列| 操死我了嗯嗯嗯| 久久、1234| 色一区二区三区综合| 综合网亚洲在线| 午夜欧美J进J出白浆流出久久久| 吉川爱美98堂在线| 四虎AV影视国产精品亚洲精品| 欧美性综合| 快灬快灬 一下爽蜜桃在线观看| 日韩三级伊人| 久久亚洲AV无码专区国产精品 | 首页亚洲国产高跟丝袜诱惑视频| 久久熟女嫩草成人片免费| 欧色网址| 亚洲精品国产无码高清| 九九色图| 在线视频五十市| 亚洲色性| 国产精品蜜臀久久久久无码AV| 综合久久久久久久综合网| 婷婷综合五月| 欧美性生活内射| 亚洲色人阁| 自拍视频一区在线观看| 欧美另类色图片| 精品久久九| 又粗又长又大国产不卡| 中文字幕一二三| 先锋色眉乱伦资源| 国产天天骚| 欧日韩一二三f区| 一区二区三区亚洲| 夜夜嗨AV一区天天| 黑人综合色| 中文人妻av高清一区| 91丨九色丨东北熟女| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 九九视频黄色片| www.色婷婷| 久久久草草精品| 秋霞成人一级在线观看| 内射白嫩美女| 青青草中日韩在线| 免费观看国产小粉嫩喷水精品午| 男人的天堂亚洲| 日本高清熟女久久一区| 92性色国产午夜福利在线661| 99人人干| 啊啊啊慢点| 亚洲二区精品在线观看| 久久久9视频| 九热久| 人人操人人叉人人插人人| 日韩欧美丝袜诱惑| 1769一区| 日韩av熟女一区二区三区成人| 91中文字幕制服丝袜免费视频| 无码视频黄色网战| 怡红院亚洲怡春院av| 高清成年美女黄网站免费大全| 狠狠搞 亚洲91| 天天澡天天爽日日AV| 黄色高清无码无码破解免费暗网| 色综合99999| 人妻中文字幕精品无码| 激情亚洲天堂| 最新国内自拍av免费| 一直超碰| 在线a v| 日本不卡免费二区| www.色婷婷色综合| 另类欧美综合| 国产在线76页| 无遮挡男女激烈动态图| 欧美最婬乱婬爆婬性视频 | 狠狠色噜噜狠狠狠狠狠色综合久久| 夜夜操天| 久96热在线观看视频| 美女人妻色网站| 99久久精品国产系列| 亚洲天堂男人在线| 99热| 日本一区三级韩国| 天天影视色香欲综合网小说| 99色视频| 一区二区免费电影久久| 色制服丝袜夫妻av一区| 久久综合激情| 国内外内射高清视频| 精品人妻一区二区免费蜜桃| 操操吧亚洲乱伦视频| 9精品久久| 岛国精品视频在线观看| 99热在线播放| 性色av一区二区| 激情四射五月天| 狠狠爱综合网| 尤物视频偷拍免费| 亚洲无线码一区国产欧美国| 美女诱惑久久| 亚洲欧美精品福利在线| 欧美激情精品| 亚洲天堂自拍| 人人操人人狠狠操| 深夜福利黄片| 黑丝制服中文字幕 | 九月丁香婷婷| 成年人黄色小视频网站| 亚洲色图日韩丝袜制服一区二区五月在线| 长长久久88视频| 人妻干天天| 亚洲九九视频| 99re69| 亚洲激情综合| 很黄很色的视频在线观看| 天天影视91看看| 久久免费看高潮毛片韩国| 国产日本久久免费精品| 成人国产二区三区在线,男女精品。| 亚洲av总站| 丁香婷婷色五月| 黄片免费日韩| 国产第二页| 久久欧美按摩999| 国产一区二区三区久久久精品| 中国91AV| 亚州欧美一区| 欧美性,色九九| 五月综合视频| 无码人妻丰满热妇又大又粗| 超碰97精品| 偷拍99| 激情内射| 亚av顶级裸体一区二区三区四区五区| 强奸少妇AV导航网| 亚洲无码免费看| 中文在线视频| 婷婷五月天影院| 91人妻视频在线| 国产成年免费大片黄在线观看| 日本一区不卡| 熟女少妇一区二区三区| 熟女在线视频| 五月色综合| 日小BB小视频| 欧美精品宗合| 97久久国产精品女不卡| 四虎影视永久在线观看精品免费网站| 日韩激情视频| 91色鬼| 色综合中文字幕不卡| 国产一区二区精品久久99| 国产狂喷潮在线精品| 97视频免费播放| 欧美色97| 香蕉国产97| 亚洲中字慕不卡| 丰满人妻一区| 宗合情欲网| 偷拍欧美激情| 色女女女导航| 天天影视综合网欧美精品| 九九黄色网| 色欲天天综合网| 亚洲国产无码精品首页久久久| www.91人妻.com| 9久精品| 欧美日本成人一区二区| www熟女乱伦com| 免费中文综合精品| 狠狠中文字幕| 三级网色| 一起草精品人妻| 干婷婷综合网| 成人羞羞视频国产| 国产精品麻豆成人av| 99久久国产精品免费高潮| 日韩欧美日韩| 国产黄色视频久久| 欧美Ⅴ性爱| 1级黄色夫妻对换性交免费看| 欧洲在线性爱视频| 国产精品分类在线观看| 国产一级特黄大片处女| 欧美性爱日韩性爱| 777奇米影视777四色| 亚洲图片偷拍视频区| 日韩三级一区 | 区二区亚洲婷| 天天干夜夜肏| 精品一区二区三区18| 国产精品视频在线观看| 亚洲网站一区二区在线| 欧美日韩午夜精品一区二区三区| 奇米四色影视777久久久| 久久精品国产99精品亚洲蜜...| 性爱边摸边日免费AV| 太久视频| 人妻AV在线| 丝袜喷水在线| 欧美极品少妇| 超碰美国| 亚洲一曲日韩精品| 99爱在线视频| 欧美A√综合网| 好涩综合| 97jingpin| 成年无码动漫av片无尽在线| 7777奇米影视久久| 色99在线| 10000部十八禁看电影| 啊啊啊啊在线播放| 欧美裸体美女日麻屄| 欧美,日韩综合久久| 夜色五月天| 亚洲精品一卡二卡三卡福利视频网站 | 色网综合网| 国产精品乱码久久| www.大香| 成 人 影视 一区 二区 三区 四区| 福利一级版子| 懂色av中文字幕| 逼操网站| 国产乱码久久| 欧美色图在线视频少妇| 少妇久久久久久| 国产 三级自拍| 九九热五区| 人妻第一页| 亚洲国产成人精品无码专区| 久热色情精品| 91精品导航| 欧美日本一区二区a人| 一区麻豆 高清中文字幕| 春色综合网| 欧美日本中字另类在线| 91人妻视频在线| 中国91AV| 色屁屁影院www国产| 久久麻豆一区二区| 久久精品人妻一区二区| 北约熟女超碰| 秋霞男人网| 97这里只有精品| 久久五月综合| 208天天久久九九九| 日韩pv中文| 玖玖无码超碰| 国产一级做a爰大片免费久久| 日han少妇无码| 亚洲精品久久久久毛片A片拉屎| 亚洲免费看片| 青青草在线视频播放器| 久久‘黄片视频| 97超碰这里只有精品| 欧美国产精品| 九草在线大香蕉| 国产Aα| 欧美日韩精品久久| 91在线秘 男同| 欧美性,亚州色| 熟妇综合一区二区三区| 亚欧精品久久久久久久久久久| 四虎884| 在线观看综合精品亚洲| 综合激情一一91| 精品亚洲黄色片 国产精品导航一区二区| 亚洲熟女国产综合另类| 97超碰护士| 亚洲精品欧洲精品| www.99色| 四季AV一区二区凹凸精品小说| 高清国产性猛交xxxx乱大交| 天天拍天天操| 久久久夜夜夜| 婷婷久热| 天天日夜干| 成人热久久精品| 日本一级婬片试看三分钟| 一区二区不卡免费| 丰满的三级少妇欧美久久久| 日日骚一区二区三区| 嗯啊不要在线| 放黄片放3级黄片没穿衣服| 久久9精品视频| 午夜男女爽爽爽影院视频| 91九九九逼| 思思热在线cao| 久肏视频字幕| 99热成人| 久操网视频| 无码人妻毛片丰满熟妇精品区| 午夜国产成人福利视频| 91美| 校园春色欧美色图| 久久综合资源一区二区| 亚欧操逼片在线观看 | 女沟厕偷窥piss小便| 偷拍网站久久男女男| 综合国产影视三级| 久艹99| 91色综| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 又黄又爽在线观看视频| 欧美色www亚洲国产阿娇要播| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV | 五十路熟女工口| 俄罗斯一区二区视频在线观看| 999国产精品999久久久久久| 欧美黑人猛交春色影视大全| 精品国产91内射久久| 大香蕉日亚洲日本亚大| 啊啊啊啊啊啊啊国| 国产精品一区二区久久精品| 丝袜色综合| 日本在线一二| 国产无码精品无码| 91欧洲入口| 久久草草欧美精品| 国产精品极品美女视频| 欧美色青| 欧美成人国产精品| 午夜精品99久久久久传媒| 国产福利精品最新在线| 亚洲欧洲中文日韩女优乱码| 国产97在线播放| 亚洲欧洲无码97久久精品| 91|九色|国产熟女| 可以免费看黄片的视频| 亚洲 欧美 日本 国内 首页| 亚洲色欲一区二区三区| 综合五月婷婷| 欧美大香蕉同搞| 国产捆绑一区| 天天看片青娱乐| 日韩中文9| 91成人在线| 桃花色涩综合影院| 手机在线中文字幕国产| 欧美综合另类| 日韩电影中文字幕| 97一区二压| 精品网站9999| 亚洲天堂综合AV| 欧美v亚洲v日韩v最新在线二区| 91一区二区三区蜜桃| 青青草影视蜜久久| 亚91亚洲网| 中亚精品极乱| 综合色播| 两性综合网| 久久精品国产亚洲AV嘿嘿| 一区二区三区美女超清| 97在线免费视频观看| 九t超碰| 日韩资源网| 一区| 少妇内射视频| 干B| 蜜臀久久99精品| 9 7超碰在线免费观看| 好吊色在线观看| 国产精品无码论坛| 免费啪啪啪网站18岁| 乱伦日本色图AⅤ| 国产不卡免费在线视频| 免费黄色A片| 中文自拍欧美影视| 日韩色| 国产乱码精品一区二区三区四川| 草莓精品视频在线免费观看| 欧美日韩*字幕一区| 久操免费在线|