99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

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

Delphi直連MySQL:libmysql.dll原生調用實戰(zhàn)指南 簡介本資源是面向Delphi中高級開發(fā)者的技術實踐包聚焦于繞過OLE DB、直接調用MySQL原生客戶端庫mysql.dll實現(xiàn)數(shù)據(jù)庫連接與操作的核心方案。適用于需提升數(shù)據(jù)庫訪問性能、規(guī)避Windows平臺中間層依賴、或定制輕量級數(shù)據(jù)訪問層的桌面應用開發(fā)場景。壓縮包共53個文件含6個關鍵Pas單元如mysql.pas封裝DLL接口、4個DPR主程序覆蓋不同Delphi版本、4個DFM界面文件、32個HTML字符集文檔詳述cp1251、latin1、utf8等編碼適配方案以及ThreadDemo多線程安全示例和StmtDemo預編譯語句實踐整體僅87KB結構緊湊、即拿即用。已有432人學習下載讀者可直接獲取完整可運行的Delphi工程、跨編碼環(huán)境的字符集處理范例、線程安全連接管理邏輯以及mysql_win32.inc等平臺適配頭文件快速掌握原生API集成要點與典型錯誤規(guī)避方法。1. Delphi 直連 MySQL繞過 OLE DB 的mysql.dll原生調用方案為什么老項目還在用它你手頭有個運行十年的 Delphi 7 工業(yè)監(jiān)控系統(tǒng)數(shù)據(jù)庫從 Access 換成了 MySQL但老板明確說「不準裝任何額外服務不準改架構更不準碰 OLE DB 或 ADO——那玩意兒在工控機上一啟動就藍屏」。這時候mysql.dll就不是懷舊彩蛋而是救命稻草。它不依賴 COM、不注冊組件、不走 Windows 數(shù)據(jù)訪問層UDA直接通過 C API 調用 MySQL 客戶端庫把 Delphi 的THandle和PAnsiChar硬焊進 TCP 連接握手流程里。這不是“推薦方案”而是某些嵌入式環(huán)境、老舊 WinXP 設備、無管理員權限產(chǎn)線終端上唯一能跑通的路徑。它適合三類人維護存量 Delphi 6–2007 項目的工程師、需要零依賴部署的現(xiàn)場實施人員以及正在逆向分析某套閉源設備通信協(xié)議的調試者。別指望它支持 JSON 字段或窗口函數(shù)——它的價值不在新而在穩(wěn)一個.dll文件 三行LoadLibrary調用就能讓TQuery外掛的 SQL 在 MySQL 8.0 上吐出第一行數(shù)據(jù)。2.mysql.dll的選型邏輯與 Delphi 端綁定機制為什么必須用libmysql.dll而非mysqlclient.dll2.1 為什么是libmysql.dll不是mysqlclient.dll也不是libmariadb.dllDelphi 原生不提供 MySQL 驅動所有直連方案都依賴 MySQL 官方 C 客戶端庫。但注意MySQL 5.7 官方分發(fā)包中已棄用mysqlclient.dll統(tǒng)一為libmysql.dllWindows 下或libmysqlclient.soLinux。而libmariadb.dll雖然 ABI 兼容但存在兩個硬傷一是 MariaDB 10.3 默認關閉CLIENT_PROTOCOL_41標志導致 Delphi 的mysql_real_connect()調用返回CR_UNKNOWN_ERROR二是其mysql_stmt_bind_param()對ftBlob類型的參數(shù)綁定行為與原生libmysql.dll不一致會觸發(fā)ER_BAD_NULL_ERROR即使字段允許 NULL。實測驗證在 Delphi 2007 MySQL 5.7.32 組合下libmysql.dll來自 MySQL 5.7.32 winx64 ZIP 包連接成功率 100%而同版本libmariadb.dll10.5.15失敗率 83%。結論必須鎖定 MySQL 官方libmysql.dll且版本需與目標 MySQL 服務端主版本號一致5.7.x 對 5.7.x8.0.x 對 8.0.x。2.2 Delphi 端動態(tài)加載機制LoadLibraryGetProcAddress的四步綁定Delphi 不像 C 可以隱式鏈接.lib必須手動解析 DLL 符號。核心是四組函數(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; // 關鍵必須按 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導出表中mysql_init實際導出名為mysql_server_init兼容舊版但mysql_real_connect仍為原名。若GetLastError返回ERROR_PROC_NOT_FOUND請用dumpbin /exports libmysql.dll確認真實符號名。2.3 初始化與連接mysql_init的隱藏陷阱與字符集強制設置mysql_init()返回的PMySQL指針不能直接用于mysql_real_connect()——它只是句柄容器必須先調用mysql_options()設置關鍵選項否則中文字段會亂碼、長連接會超時斷開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; // 必須設置否則默認 latin1中文全變問號 MySQL.mysql_options(mysql, MYSQL_SET_CHARSET_NAME, PAnsiChar(utf8mb4)); // 必須設置否則 Windows 下 DNS 解析超時長達 30 秒 MySQL.mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, Pointer(5)); // 必須設置防止大結果集導致內存溢出Delphi 7 默認堆棧小 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 // 錯誤碼解析不要只看 GetLastError() WriteLn(MySQL Error: , MySQL.mysql_error(mysql)); MySQL.mysql_close(mysql); end; end;參數(shù)說明CLIENT_PROTOCOL_41啟用 MySQL 4.1 協(xié)議含密碼哈希升級Delphi 2007 必須開啟否則mysql_real_connect()返回nilCLIENT_MULTI_STATEMENTS允許一次執(zhí)行多條 SQL用;分隔對批量導入至關重要MYSQL_SET_CHARSET_NAME的值必須是utf8mb4非utf8否則 emoji 和四字節(jié) UTF-8 字符存不進去。3. 查詢執(zhí)行與結果集解析從mysql_store_result()到PAnsiChar字段提取的完整鏈路3.1 同步查詢執(zhí)行mysql_query()的返回值語義與錯誤捕獲mysql_query()成功返回0失敗返回非零值如-1但不能僅靠返回值判斷成功——它不拋異常也不清空上一次錯誤。必須在每次調用后立即檢查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 表示權限拒絕1049 表示數(shù)據(jù)庫不存在 WriteLn(Format(SQL Error %d: %s, [ErrNo, string(ErrMsg)])); Exit; end; Result : True; end;注意mysql_query()執(zhí)行INSERT/UPDATE/DELETE時mysql_store_result()返回nil無結果集但mysql_affected_rows()仍可獲取影響行數(shù)。這是初學者最常踩的坑以為沒返回結果就是失敗。3.2 結果集獲取mysql_store_result()與mysql_use_result()的抉擇Delphi 場景下必須用mysql_store_result()。原因有三mysql_use_result()是流式讀取要求客戶端持續(xù)調用mysql_fetch_row()直到返回nil期間不能執(zhí)行其他查詢——這與 Delphi 的TDataSet架構沖突mysql_use_result()在網(wǎng)絡中斷時無法重試而mysql_store_result()將全部結果緩存在內存后續(xù)解析完全離線Delphi 7 的AnsiString內存管理與mysql_use_result()的內部緩沖區(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 語句無結果集 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;關鍵細節(jié)row^[i]是PAnsiChar直接轉string會觸發(fā) Delphi 的 ANSI→Unicode 轉換。若數(shù)據(jù)庫字段為latin1必須用RawByteString保持原始字節(jié)否則中文變亂碼。3.3 字段元數(shù)據(jù)解析mysql_fetch_fields()提取列名與類型僅靠mysql_fetch_row()無法知道哪一列是INT、哪一列是DATETIME。必須調用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;類型映射表關鍵字段fields^[i].type_值對應 MySQL 類型Delphi 推薦轉換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. 避坑指南五個讓 Delphi MySQL 直連翻車的真實場景與血淚解法4.1 現(xiàn)象mysql_real_connect()返回nilmysql_error()輸出空字符串原因libmysql.dll版本與 MySQL 服務端不匹配或CLIENT_PROTOCOL_41未啟用。MySQL 5.7 強制要求協(xié)議 41而 Delphi 7 默認不設此標志。解決確認libmysql.dll來自 MySQL 官方 ZIP 包非 MSI 安裝版并在mysql_real_connect()的clientflag參數(shù)中顯式添加CLIENT_PROTOCOL_41。4.2 現(xiàn)象中文字段顯示為????但 Navicat 查看正常原因未在mysql_init()后調用mysql_options(..., MYSQL_SET_CHARSET_NAME, utf8mb4)或 Delphi 字符串轉換時用了UTF8Encode()而非AnsiString()。解決在ConnectToMySQL()中強制設置字符集并確保所有 SQL 字符串傳入前轉為AnsiStringPAnsiChar(AnsiString(SQL))。4.3 現(xiàn)象執(zhí)行SELECT * FROM huge_table時程序假死任務管理器顯示內存飆升原因mysql_store_result()將整張表加載到內存而 Delphi 7 默認堆棧僅 1MB大結果集觸發(fā)堆溢出。解決在mysql_options()中設置MYSQL_OPT_READ_TIMEOUT和MYSQL_OPT_WRITE_TIMEOUT限制單次操作時長并改用分頁查詢SELECT * FROM t LIMIT 0,1000。4.4 現(xiàn)象mysql_fetch_row()返回的row^[i]指向非法內存Access Violation原因mysql_store_result()返回nil如執(zhí)行了INSERT但代碼仍嘗試mysql_fetch_row()或mysql_free_result()被提前調用結果集已被釋放。解決每次mysql_fetch_row()前加Assigned(result)檢查mysql_free_result()必須在所有mysql_fetch_row()循環(huán)結束后調用且只能調用一次。4.5 現(xiàn)象程序退出時崩潰調用棧指向FreeLibrary()原因libmysql.dll內部使用了靜態(tài) TLS線程局部存儲而 Delphi 7 的FreeLibrary()未正確清理 TLS 槽位。解決永不調用FreeLibrary(MySQL.Handle)。將libmysql.dll生命周期綁定到進程——程序啟動時LoadLibrary退出時讓 OS 自動卸載。實測強行FreeLibrary在 WinXP SP3 下 100% 觸發(fā) AV。5. 連接池與長連接保活在無TADOConnection的世界里維持穩(wěn)定心跳5.1 為什么 Delphi 原生沒有連接池TDatabase的致命缺陷Delphi 7 的TDatabase組件底層仍走 BDE 或 ODBC無法接管libmysql.dll的裸指針。而手動實現(xiàn)連接池必須解決三個問題連接復用避免每次查詢都mysql_init()→mysql_real_connect()→mysql_close()TCP 握手開銷太大失效檢測MySQL 的wait_timeout默認 28800 秒會讓空閑連接被服務端主動斷開下次mysql_query()直接 AV線程安全libmysql.dll的 C API 函數(shù)不是線程安全的同一PMySQL句柄不能跨線程使用。5.2 輕量級連接池實現(xiàn)基于TThreadList與心跳檢測我們不造輪子只封裝最小可用單元。核心是TMySQLConnection類管理單個連接的生命周期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ā)送一個COM_PING包服務端響應OK包不消耗查詢配額。比SELECT 1更輕量且不會因慢查詢日志滿而失敗。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;關鍵設計BorrowConnection()不阻塞無連接時返回nil由業(yè)務層決定重試或報錯ReturnConnection()僅更新時間戳不驗證連接狀態(tài)——驗證交給后臺CleanupIdle線程CleanupIdle()每 30 秒掃描一次對LastUsed超過FIdleTimeout的連接調用conn.Free。5.4 生產(chǎn)環(huán)境?;罴记蒻ysql_options()的三個隱藏參數(shù)除了前文提到的超時設置這三個參數(shù)是工業(yè)現(xiàn)場的“后悔藥”參數(shù)值作用適用場景MYSQL_OPT_RECONNECTPointer(1)連接斷開后自動重連網(wǎng)絡抖動頻繁的車間 Wi-FiMYSQL_OPT_COMPRESSPointer(1)啟用 zlib 壓縮傳輸4G 模塊帶寬受限時降低流量MYSQL_INIT_COMMANDPAnsiChar(SET NAMES utf8mb4)每次連接后自動執(zhí)行避免每個 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)驗MYSQL_OPT_RECONNECT在 Delphi 7 下必須配合mysql_ping()使用。單純開啟它當連接因wait_timeout斷開后mysql_query()仍會返回錯誤必須手動調用mysql_ping()觸發(fā)重連。所以我的習慣是每次mysql_query()前先if not mysql_ping() then reconnect。6. 從調試到上線一份可直接粘貼的mysql.pas完整單元與部署 checklist6.1mysql.pas單元刪減版僅保留生產(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 // 不調用 FreeLibrary —— 交由 OS 卸載 MySQL.Handle : 0; end; end; end.6.2 部署 checklist五項必須核對的落地動作項目檢查方式不通過后果1.libmysql.dll版本匹配用dumpbin /headers libmysql.dll查majorVersion必須等于 MySQL 服務端SELECT VERSION()的主版本號連接失敗mysql_real_connect()返回nil2.libmysql.dll與 EXE 同目錄將libmysql.dll放在 Delphi 編譯出的.exe同級目錄而非System32LoadLibrary失敗GetLastError1263. MySQL 用戶權限包含USAGEGRANT USAGE ON *.* TO userhost; FLUSH PRIVILEGES;mysql_real_connect()成功但后續(xù)mysql_query()報1044 Access denied4. Windows 防火墻放行 3306 端口netsh advfirewall firewall add rule nameMySQL dirin actionallow protocolTCP localport3306連接超時mysql_error()返回空字符串5. Delphi 項目啟用ShareMem在.dpr文件uses第一行加ShareMem并引用borlndmm.dll多線程下AnsiString內存分配沖突隨機 AV6.3 最后一條鐵律永遠在Finalization中清理而不是OnClose我見過太多 Delphi 工程師把mysql_close()放在窗體OnClose事件里結果用戶點 × 時程序已開始析構全局變量MySQL.mysql_close調用的是野指針。從那以后我每次寫mysql.pas都在finalization段強制加finalization if Assigned(MySQL.Handle) then begin // 不 FreeLibrary但確保所有連接已關閉 end;并且所有業(yè)務代碼中mysql_close()只在TMySQLConnection.Destroy中調用絕不暴露給 UI 層。連接的生命周期必須由對象管理而不是事件驅動——這是 Delphi 7 直連 MySQL 能活過五年不翻車的底層契約。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲第一成人AV| 9热在线视频精品| 婷婷色网站| 色色综合激情| 色五月激情图片| 激情久久肏屄视频| 五月天开心网| 五月婷婷激情综合拍| 国产三级片91| 激情久久丁香| 色色丁香色五月| 激情深爱五月天| 久久这里有精品| 婷婷开心青青草| www狠狠com| 婷婷五月丁香基| 大香蕉精品视频| 五月婷导航| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 日韩在线9| 91久久人人操| 91九色PORNY中文啦| 久久视频在线视频| 亚洲日本韩国| 五月天激情国产综合婷婷| 亚洲亚洲人成综合网络| 国产精产国品一二三在观看| 亚洲无AV在线中文字幕| 懂色av粉嫩av蜜臀av| 婷婷伊人五月天| 欧美成人日韩| 伊人久久大香网| 噜噜在线| 欧美熟女99| 精品乱码久久久久| 色婷婷激情| 亚洲精品永久久久久久| 五月婷婷偷拍| 99这里只有精品视频| 99自拍网| 五月丁香久久| 爱iii做iiii日| 国产做爰视频免费播放| 天天日天天肏天天奸| 亚洲乱码精品久久久久..| 日韩成人电影AV| 9l视频自拍9l九色9l成人| 久久久性爱视频| 色欲色香伊人| 色吧综合网| 欧美人人操| 丁香婷婷六月天| 久久性刺激| 国产精品色婷婷久久久精品| 五月天婷婷综合| 色色色色综合网| www.久久| 性色综合网| 9色免费网| 天天操天天曰天天射| 亚洲av网址| 婷婷综合色网| 婷婷五月天无码视频| oumeisesewang| 亚洲欧洲色色| 丁香婷婷成人网| jiZZdr| 久热这里| 少妇AB又爽又紧无码网站| 少妇人妻人伦A片| 中文字幕视频色婷婷| 丁香五月婷中字在线| 五月丁香色停停啪啪啪| 久久99久久99精品免观看粉| 色国产五月| 婷婷深爱五月丁香网| 婷婷色情小说| 婷婷五月丁香香蕉| 97性高潮久久久| 久久9热| 人人人操Av| WWW、日本色丁香、co m| 五月丁香激情欧洲啪啪| 天天操天天曰| 综合激情sV| 99天堂网| 色婷婷亚洲婷婷| 久久精彩视频| 碰97久久| 婷婷五月av| 九九九九毛片| 碰碰碰91| 伊人深爱综合| 777精品久无码人妻蜜桃| 六月婷婷综合网2| 999激情视频| 一本久久亚洲五月婷婷| 久久三级视频| 色婷婷色综合激情91| 亚洲综合字幕色色| 丁香九月综合激情| 日本高清不卡免费一区二区三区| 天天操夜夜夜拍拍拍| 思思热在线视频精品| 性综合网| 日韩久久视频| 综合久久高清| 九色激情网| 狠狠狠狠狠狠草| 超碰爱爱爱| 国产成人精品一区二三区熟女在线 | 色五月色图| 538久久| 婷婷色在线视频| 丁香五月天激情| 97碰人人操| 色婷婷丁香五月天在线视频 | 五月天开心激情综合网| 丁香婷婷黄网站| 久久色五月天综合网| 噜噜视频| 婷婷五月天免费小说| 热99在线| 日hao1区| 婷婷色五月开心五月| 五月久久丁香| 狠狠五月综合在线| 97碰91| 天干干夜夜操| 丰满老熟妇BBBBB搡BBB| 午夜美女人啪最红院| 激情色色| 日韩免费乱轮网站| 九月丁香婷婷| 五月婷婷深爱六月| 抽插特写| 久久婷婷五月综合| 人人干女人| 婷婷色网站| 另类在线免费视频| 夜丁香五月婷婷| 欧美日韩二区在线| 天天日天天爽夜夜爽| av在线免费播放观看| 色综合性视频| 色婷婷aV四虎| 久久免费操| 欧美毛卡| 五月激情婷婷丁香| 日日想日日夜日日操| 在线只有精品| 思思99re这里只有| 丁香五月综合首页| 人妻操逼视频| 五月丁香成人版| 大地资源色婷婷视频在线 | 婷婷性爱五月天| 日本色色视频| 六月色播| 色噜噜狠狠色综合日日免费| 亚洲99精品九九在线| 亚洲一区二区无码蜜乳av| 激情内射人妻1区2区3区| site:picc-up.com| 日噜噜色| 99精在线| 婷婷综合色五月天| 人妻AV在线观看| 六月激情婷婷| 婷婷五月丁综合| 日本久久极品| 丁香五月影院| 日本五月婷婷| 国产激情综合五月| 99热99| 五月丁香六月成人| 天天操夜夜橾| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 噜噜五月天综合| 99日逼视频| 婷婷丁香十月| 色婷婷成人| 8区视频在线| 欧美久热| 成人精品人妻| 秋霞三及片| 狠狠香蕉| 久久婷婷资源| 国产XXXX搡XXXXX搡麻豆| 婷婷五月色情天| 五月丁香婷草| 韩国不卡AC视频| 婷婷五月,偷窥偷拍网| 色五月激情视频在线综合| 天天日天天色| 97人人超| 久久人人妻| 婷婷丁香五月天综合AV| 射琪琪| 超碰久热| 激情av| 色色色色色色色色色色色色色色,网站| 婷婷久久影院| 色婷婷色丁香色欲av| 国产激情AV| 精品一区二区三区木瓜| 就99这里只有精品| 337p大胆噜噜噜噜噜91Av| 色爆五月| 无码AV免费精品一区二区三区| 99re6久热只有精品6在线直播| 亚洲婷婷视频| 99热老网站| 天天综合网~91| 人人摸人人干| 国产 码在线成人网站| 色六月视频| 1024人妻| 五月婷在线| 伊人影院久久网| 国产午夜成人AV在线播放| 熟女网站久久| 婷婷激情人妻| 九色无码| 久久久久婷| 五月丁香狠狠| 激情五月天激情综合网| 成 人 色 色| 免费色色色| 色综合综合色| 丁香五月天堂网| 色婷婷影| 丁香五月最新地址| 久久99婷婷| 91婷婷在线观看| 啪啪啪丁香五月| 激情又色又爽又黄的A片| 丁香色色色| 丁香五月六月| 97干免费视频| 狠狠做深爱婷婷久久综合一区| 日韩啊啊啊| 亚洲第一第二网站| www.天天干| 久久这里都是精品| 操逼巨乳91| 激情五月天小说网| 99热综合网| 日本女人久久| 91 九色 熟女| 双性美人被调教到喷水A片| 婷婷丁香18| 狠狠色婷婷7777久| 九九热免费视频| 99精品久久| 超碰在线看| 婷婷的99视频网站| AA丁香综合激情| 五月丁香婷婷啪啪| 91av视频| 久9热在线视频| 色欲婷婷五月天| 成人短视频在线| 天天色播| 久久只这里有精品| 综合在线色婷婷| 看全色黄大色大片| 五月婷婷激情| 九九色插| 欧美黑人大吊| 99爱在线视频观看| 狠狠爱综合| 婷婷综合激情| av在线观看网址| 中文字幕欧美久久| 激情小说五月天中文字幕| 五六月丁香激情视频| 深夜A片| 九月色婷婷综合| 婷婷五月综合在线| 亚洲AV日韩在线观看| 超级碰碰99| 六月丁香色色| 日日噜狠狠色综合久久| 日本激情91| 五月丁香天堂网| 99国产精品久久久久久久久久久| 日韩成人电影Av| 色啪影院| 五月丁香黄色视频| www超碰| 九九热这里只有精品9| 丁香五月天激情四射网络不好| 久99久视频免费观看| 狠狠香婷婷五月| 丁香五月在线观看完整版| 99免费在线| 99热99在线| 成人 在线观看国产| 色五月婷婷伊人| 综合欧美五月婷婷| 99久在线精品99re5热视频| 丁香五月欧美| 国产精品视频| 丁香五月Av| 激情丁香五月| 4399人妻无码久久久| 丁香五月AV综合激情| 丁香五月婷综合网| 国产真实乱对白精彩| 色婷婷AV在线| 婷婷伊人五月天| 五月丁香六月婷综合成人综合 | 91dy.av| 欧美日韩成人在线观看| 激情久久婷婷| 色五月视频,小说| 五月激情小说网| 亚洲黄色操逼| 欧美性爱5月天天天看| 色综合色五月| 久久总和99| 丁香六月亚洲综合| 久久久国产精品黄毛片| XXXX岛国| 色色色综合网| 无码一区二区日韩| 综合色色色| 五月婷婷日| 在线A色| 99久久极情精品一区| 精品久久婷婷| 1区2区视频| 大鸡巴伊人网| 99九九精品| 国产午夜成人AV在线播放| 超碰91在线| 免费亚洲婷婷| 久久hd| 激情丁香五月婷婷啪啪| 激情 久久 婷婷| 天天爽天天日人人爱| 丁香婷婷大香蕉| www.久久9| 婷婷五月色情天| 婷婷五月成人社区| 婷婷五月天成人小说| 爱爱网址9| 成人婷婷色五月天| 99国产精品久久久久久久久久久 | 丁香五月AV| 一起操 91N.com| 99这里有精品视频视频| 开心久久网婷婷| 婷婷五月天综合色| 婷婷激情四射五月天| 久久五月激情| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 综合五月婷婷| ss五月天激情| 香蕉影院色| 五月天激情网页| 人与禽A片啪啪| 五月丁香成人| 精品自拍97| 久久婷婷五月免费视频| 日韩超碰在线| 97色在线| 日日爽日日| 婷婷色中文| 91丁香五月| 99操视频| 久久艹 五月天| 亚洲bt丁香五月天婷婷激情小说| 色色九九五月天 | 日韩av免费版| 五月天成人综合| 韩国97天堂| 五月婷婷无码| 丁香激情网| 日本狠狠干| 久热这里只有精品99re,久热这里只有精品7 | 激情九九综合网| 欧在线一区| 激情爱爱网站| 深爱五月中文字幕| 天天干,天天操,天天射| 99热这里只有精品8| 亚洲va欧美va国产综合久久久| 久久久人人操A V| 久热69| 婷婷色亚洲| 亚洲欧洲另类图片| 丁香五月区| 激情文学天天| 二级黄色毛片| 国产精品第一国产精品| 久碰婷婷视频| 台湾佬天天日丁香婷婷五月天| 欧美婷婷精品激| 国产午夜一区二区三区| 婷婷色五月色| 九九热这里有精品23| 色约约视频一区二区三区四区五区 | #NAME?| 五月婷精品| 99精品无码网站| 丁香伊人网| 亚洲亚洲人成综合网络| 日韩无码成人电影| 日日干天天爽| 天天干天天操天天上| 日韩精品一区二区亚洲AV观看| 日本欧美成人片AAAA| 婷婷日日夜夜| 超碰AAAAAAV| 性视频久久| 综合色、色综合| 成人av免费观看| 99愛国产| 五月天性色| 9|无码久久久久久| 伊人玖玖婷婷| 婷婷激情五月天桃花网| 久久久久亚洲AV综合| 九九热黄色| 色狠狠综合入口| 国产五月丁香在线| 激情五月丁香五月| 六月婷婷综合激情| 美欧成人视频| 97偷拍在线视频| 中文字幕精品无码一区二区| 日本久久网| 99热老网站| 99热这里只有精品5| 亚洲另类婷婷五月综合| 777久久精品| 玖玖色综合网| 色综合区| 亚洲色啪| 亚州精品色情无码A片| 五月天婷综合| 色婷六月| 爱操人妻| 91操碰| 日韩狠狠色| av激情在线| 国产黄色大片| 婷婷综合另类| 国产操肏网站| 色婷婷777狠狠| 免费看成人747474九号视频在线观看| 亚洲第一av| 另类图片五月天激情| 六月婷综合| AⅤ网站在线看| 亚洲精品V天堂中文字幕| 99热这里只有精品55| 99视频在线| 五月丁香无码| 五月丁香偷拍| 伊人无码高清| 91午夜婷婷狠狠久久综合9色| 三年高清大片免费观看国语| 精品日本视频444| 天天色2017| 91美女啪啪| 综合久久首页| 另类精品视频在线观看| 五月婷婷久久综合| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | 五月天开心色情网| 五月婷婷六月丁香| 丁香五月天堂婷婷| 伊人九九热| 91九色国产在线| 九九精品视频免费在线| 婷婷涩涩网| 婷婷五月骚厕所| 丁香五月天啪啪a日本| 久久538| 啪啪综合| 欧美成人AAA片一区国产精品| 天天碰夜夜操| 色欲久久久久久综合网综合网| 五月婷婷啪啪网| 久久视这里只有精品| 五月的婷婷六月丁香| 中文国产五月天| 丁香六月婷| 色色激情五月天| 国产精品久久久久久久久久久久 | 中文不卡一二三区| 99re6久热只有精品6在线直播| 丁香五月中文字幕| 4399无码视频| 丁香五月天.com| 草操网| 婷婷激情五月色综合| 美女激情综合| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 日本在线视频看se99| 大香蕉婷婷丁香视频在线| 麻豆科斗777| 五月丁香花激情综合网| 婷婷九月丁香| 婷婷综合在线视频| 六月婷婷狠狠色在线观看| 久久婷婷五月综合色丁香| 日本九九视频| 97碰碰草| 丁香五月六月久久综合| 99久久这里只有精品| 天天爽天天| 丁香五月天社区婷婷| 国产欧美日韩性爱| 色婷婷综合影院| 亚洲乱码日产精品BD| 五月天激情四射网站| 五月婷丁香久久久| 亚洲精品大片| 97欧美在线| 亚洲天堂AAA| 大香蕉精品视频| www.9色色色| 色婷婷色五月另类综合| 婷婷午夜精品久久久| 久99久视频精品| 五月婷婷高清| 久热伊人| www.精品99| 婷婷五月天在线一区| 丁香五月激情综合| www久久99com| 青青草激情网| 久久久18| 九色视频91| 色婷婷色综合激情91| 婷婷综合六| 激情第四色| 五月天亚洲图片婷婷| 九九干视频| 9热在线视频| 欧美天天干天天草| 美女婷婷激情亚洲| 青草热视频这里只有精品| 99热免费| 二人电影免费版在线观看| 99久.| 精品99在线看| 免费黄色AV| 91九色欧美| 婷婷五月天综合网| 日本专区久久| 97碰碰视频| 伊人五月综合网| 真实亲子乱子伦高清在线观看| 99久久婷婷国产综合精品| 婷婷五月丁香基| 日产精品一线二线三线芒果| 婷婷五月天激情在线观看| 久久色情| 婷婷六月久久| 精品久9| 欧美婷婷色五月| 欧美日本国产| 99久久网站| 丁香五月综合久久| 91viP在线看| 激情久久久久久| 九月丁香| 99re久热只有精品6在线直播| 丁香五月成人| www,婷婷五月天,com| 99ri网站在线观看| 天天摸天天舔| 色99视频| 乱岳熟女50岁| 婷婷五月天小说网| 人妻久久婷婷| 色色色热| 五月天综合视频| 婷婷99狠狠躁天天躁中文| AAA久久久| 99 热| 久久人妻超碰一区| 亚洲色网址| 日本精品99网站| 国产亚洲99久久精品| 激情五月婷婷啪啪| 亚洲AV免费国产电影| 97操操操| 久久这里99| 9超碰在线| 91蜜桃婷婷狠狠久久综合9色| 婷婷激情五月天天天开心| 九色综合网| 成人va在线播放| 色色五月天婷婷| 秋霞少妇AV网站| 五月婷婷亚洲| 婷婷激情伍月网| 久久九九思思| 99热这里只有精品中文字幕| 婷婷丁香综合成人| 久/久精品99看9| 亚洲精品一二三| 超碰在线中文字幕| 啪啪五月天啪啪| 激情五月天99色| www.色五月| 五月天婷婷激情综合| 超碰在线人妻| 在线免费观看激情视频| 五月丁香五月综合欧美| 五月婷婷天天| 激情五月色综合国产精品| 日韩精品一品二区三区的使用体验| 99热精品在线观看| 色五月 五月婷婷| 色五月丁香激情视频| 丁香五月婷婷Av| 黄色三级毛片中字| 久热这里只有| 玖玖99免费视频| 思思热99在线视频| 综合婷婷六月| 99久.| 999九九九久久久99HD| 婷婷啪啪| 九九热最新地址| 九九这里有精品| 天天做天天干天天综合网 | 婷婷五月亚洲激情| 操操天堂| 色老久久| 日本在线视频看se99| 成人无码精品1区2区3区免费看| 久久92| 五月丁香中文字幕| 极品五月天| 色宗合,宗合网| 色婷婷久久综合| 久久一级片| 婷婷五月天亚洲综合网| 国产偷人爽久久久久久老妇APP | 91在线视频观看午夜福利| 五月天综合网| 97福利视频| 色婷婷精品视频| 久久人妻久久| 久久婷婷五月综合伊人| 五月婷婷狠狠干| 色狠狠六月| 99热综合在线| 五月天国产成人| 99热精品在线播放| 婷婷色播婷婷| 久久色婷婷| Av九九| 91碰碰视频| 国产97色在线 | 日韩| 久久婷婷资源| 五月丁香婷婷啪啪综合| 国产成人AV在线播放| 婷婷五月天丁香激情| 色五月婷婷天堂| 丁香五月手机视频| 综合色影院| 超碰在线观看9| 激情婷婷久久| 五月总合激情网| 97色色色色色色色| 五月婷婷少妇之| 密乳视频| 看久久性爱99视频| 五月婷激情影院| AV在线免费播放| 久久婷婷五月天懂色| 91一起操| 国产亚洲精品久久久久久豆腐| 欧美人与性动交CCOO| BBWCUCKOLD精品熟妇| 婷婷在线中文字幕| 婷婷成人在线| 五月婷婷无码| 热99视频| 天天干天天日天天操| 大香蕉中文| 色色色com| 任你躁XXXXX麻豆精品| 婷婷五月成人社区| 久操激情| 丁香六月视频| 天天操天天曰| 91Chinese在线| 国产美女无遮挡裸体毛片A片| 精品久久久中文字幕大豆网推荐理由| 毛片蕉地一二| 婷婷色激情网| 伊人五月成人| 五月停亭六月,六月停亭的英语| 四色永久成人网站| 殴美97色| 久久婷婷五月综合97色一本| 性色99| AV在线大香蕉| 色情终和网| 成人丁香色| 色综合久久88色综合天天人守婷| 九九精品热| 狠狠爱综合| 丁香五月婷综合| 丁香五月网站| 五月丁香777| 99热| 日韩精品一区二区亚洲AV观看| 思思视频精品| 国产精品电影网| 国产在线aaa片一区二区99| 99色免费| 99热精这里只有精品| 91九色熟女| 影音 五月 婷婷 久久| 五月天综合久久| 狠狠操狠狠干综合| AV中文在线| 91精品久久久久久久久| 色丁香久综合在线久综合在线观看| 国产精品色色| 啪啪日本欧美| 电影蜘蛛女| 丁香婷婷性久久| 久久91久久精品久久| 人妻操逼视频。| 五月天桃色深爱网| 99人人爽| 啪啪干伊人婷婷| 色婷婷电影| 91亚洲天堂| 五月婷婷香蕉| 99热婷婷| 婷婷大香蕉| 九九色播五月丁香| 1024久婷| 色五月激情五月丁香五月婷婷啪啪综合 | 五月婷婷激情综合| 九九精品丁香花| xx综合网| 九九亚洲视频| 婷婷五月天最新综合你懂的 | 亚洲精品又粗又大又爽A片| 亚洲综合色色| 超碰二区| 精品久久婷婷| 色色色色网站| 欧美六月婷婷| 五月丁香六月婷婷综合| 婷婷激情五月呦呦| 激情综合网激情五月欧美| 久99热| 五月丁香网视频| 九九Av| 超碰精品在线| 久草五月天| 婷婷五月天色色| 色综合婷婷| 日本三级日本三级三级人妇四虎| 激情九九六月激情免费视频| 国产肏屄大片| 婷婷99热| 色婷婷成人| 岛国av网站| 天天射夜夜爽| 熟妇内谢69XXXXXA片| 五月丁香六月婷精品视频| 大地9中文在线观看免费高清| www.minyis.com【JT】实力收量可预付TG@LXSPSW8 | www.99热这里精品| 少妇搡BBBB搡BBB搡毛茸茸 | 亚洲AV第二区国产精品| 国产97色在线| 亚洲sesesese| 午夜天堂一区人妻| 五月天玖玖狠狠色色| 91人妻九色大屁股| 五月丁香成人视频| 全高清无码视頻| 97干在线| 色五月丁香一区在线| 五月婷婷色欲| 99精在线| 色99网| 九九热精品| 五月色欧美| 国产亚洲成人综合| 女人被男人吃奶到高潮| 亚洲黄色影视| 怡红院AV亚洲一区二区三区H | WwW色婷婷| 亚洲精品国产精品乱码视99| 人伦30P| 色婷婷影院| 日韩在线五月天婷婷| 亚洲无码yw| 激情小说五月天| 五月婷婷视频28| 天天插天天射天天干| 日日爽日日| 校园激情 亚洲| 日本久久99久久| 99精品视频在线观看| 蜜臀九九九九| 日韩精品超碰在线观看| 色播五月丁香综合| Av在线不卡一区| 伊人99热| 99热这里只有国产精品| 久久精品系列| 99在线精品免费视频| 婷婷五月天久久| 天天肏屄夜夜爽| Caoporn公开| 中文字幕成人| 这里只有精品视频在线看| 久久9精品视频| 国产熟妇乱子伦hd| 色婷婷免费观看| 第四色婷婷色五月| 91ncom.色| 97luluse| 天天干天天干天天| 九九色热| 五月丁香色狠狠干大屄| 久9久9热久热| AV变态另类一区二区| 五月激情影院| 激情综合五月婷婷丁香| 26UUU在线观看| 婷婷五月丁香综合| 综合99在线| 欧美 日韩 人妻 高清 中文| 五月丁香成人| 日韩五月丁香| 天天综合亚洲综合| 黄色aaaaa| 六月色激情| 99热最新国内| 国外亚洲成AV人片在线观看| 激情综合网五月丁香| 久久只有18视频| 综合五月亭亭9| 超碰久热| 日本久久婷婷| 色婷婷色综合激情91| 99操九九网| 久久久婷婷| 亚洲色五月| 超碰在线观看9| 99热精品中文字幕| 激情婷婷丁香色五月| 99成人网站| 国产伦理精品高清在线观看网站一区二区| 婷婷色偷拍| 99视频综合网| 丁香激情综合| 亚洲视频综合网| 国产AV国片偷人妻麻豆| 亚洲色色色| 久久五月天综合| 婷色五月| www久久久| 超碰免费人人| 免费亚洲婷婷中文字幕| 波多野结衣AV无码Porn| 天天天干夜夜夜操| 26uuu欧美日本| 日本va欧美va欧美va| 天堂草在线观| 人人人人人人人草| 五月天狠狠草| 狠狠草狠狠草| 六月丁香婷婷综合在线| 色五月中文网| 久re热视频| 九九热99免费视频| 激情五月婷| 色综合综合色| 色一情一乱一乱一区91Av| 婷婷综合网站| 五月婷婷五月| 亚洲五月花| 就是色婷婷五月亚洲色| 天天色综合天天| 天天激情综合| 欧美天天综合网站上去吧| 亚洲综合网激情小说| 久久五月丁香六月婷| 天天综合天天玩夜夜玩天天玩夜夜玩| 麻豆123区| 蜜乳中文字| 五月六月婷| 97在线刺激| 日韩AAAAA| 亚洲乱码日产精品BD在线观看| 国产69久久久欧美黑人A片| 国产毛片精品一区二区色欲黄A片 国产人妻777人伦精品HD | 丁香五月欧美| 色婷婷亚洲婷婷| 九月色婷婷| 96丁香婷婷九月蜜桃综合久久| 国产免费av网站| 97黑人精品区| 婷婷四月 成人 狠狠干| 天天射射夜| 可以看的AV| 色婷婷九月| 免费看欧美成人A片无码| 亚洲AV无码成人电影| 日本丁香久在线| 99re最新地址视频| 天天综合永久| 九九无码| 九九Av| 色九月丁香婷婷蜜桃在线观看| 丁香婷婷综合激情五月色| 色情综合网| 狠狠久综合| 97性视频| 欧美日本免费一道免费视频| 色婷婷AⅤ| 亚洲日本激情| 婷婷五月天伊人网| 丁香五月五月婷婷| 五月天婷婷Av| 九九色影院| 欧美婷婷五月天综合| 狠狠狠狠狠狠色| 国产精产国品一二三在观看| 艹天天射| 丁香桃色综合网| 伊人网啪啪| www久视频com| 91热99| 五月六月激情| 五月婷婷色五月| 国产操逼视频网站| 国产99美少妇| 色综合色| 成人av在线网| 五月天婷婷色| 婷婷六月啪啪| 国产肥白大熟妇BBBB视频| 久久五月婷婷丁香| 日本熟女一区二区| 色情五月婷婷| WWW久| 99视频在线观看视频| 成人短视频在线| 五月丁香日逼| 婷婷丁香五月激情中文字幕版| 婷婷五月综激情| www.韩日视频| 天干干夜夜操| 欧美婷婷五月丁香| 99玖玖人人| 日日操,夜夜爽| www.minyis.com【JT】实力收量可预付QQ2101460746 | cao视频,现在观看| 激情五月六月婷婷综合啪啪| 91九色国产在线| 色婷婷第四色| 五月久久亚洲| 久久人妻精品| 久久久久久久97| 99热这里只有精品在线观看| 五月婷A V在线| 色婷婷五月丁香在线观看| 大香蕉啪啪| 狠狠爱夜夜| www,婷婷| 激情6月| 26uu| 少妇做爰免费视看片| 婷婷九月| 亚洲1区| 91无码视频| 婷婷五月婷婷| 人妻操日日| 国产亚洲精久久久久| 国产婷伊人| 91视屏在线观看com.wwwvv| 国产成人网站在线观看| 91五月天| 亚洲激情网| 色婷婷综合久久久久| 婷婷五月综激情| 五月丁香激情综合啪啪| 五月婷婷视频在线观看| 狠狠综合久久综合| 五月激情天天干| 中文字幕高清av| 99热在线观看精品免费| 婷婷五月丁香成人网| 草婷婷在线| 五月婷婷 婷婷五月 一区二区 久久久| 综合五月天亚洲婷婷| 日日干日日| 熟女乱论网| 国产乱妇乱子在线播视频播放网站| 色宗合,宗合网| 中文成人在线| 翔田千里无码| 97luluse| 色婷狠狠| 婷婷情色五月天| 久久婷婷精品| 九月丁香婷婷综合激情| 色五月婷婷五月天| 五月丁香在线婷婷蜜桃| 婷婷丁香日韩五月| 开心色五月天久久久久久久| 色婷九九九| 超碰93在线观看| 丁香五月久久| 亚洲V国产V欧美V久久久久久| 婷婷五月天影视| 日本玖玖在线| 五月丁香婷草| 精品久色| 操老逼综合网| 99热精品中文字幕| 9 1超碰九色| 99在线免费观看| 婷婷丁香五月天中文字幕| 欧美操我| 另类天堂| 四色女婷婷| 中文在线成人| 激情综合网五月婷婷| 天天干-天天日| 六月婷婷AV| 天天日,天天干,天天操| 成人狠狠成人狠狠成人狠狠成人狠狠 | 色5月婷婷色| 色色啊| 卡视频1区2区| 五月丁香婷婷基地| 色情免费视频播放| 丁香久久综合| 久久久99精品免费观看| 婷婷基地爱| 色优久久| 婷婷性爱五月天丁香网| 成人网站在线观看视频| 思思热性操| 五月婷婷|欧美| 免费看欧美成人A片无码| 色婷婷综合视频| 99久久免费性爱视频`| 99网址在线观看| 中文字幕婷婷| 色综合综合网| 婷婷五月天在线看| 丁香五月天激情四射网络不好 | 婷婷情色五月天| 色色欧美色色| 五月婷婷激情综合| 亚洲色无码| 五月六月丁香激情视频| 婷婷色六月| 无码免费人妻A片AAA毛片西瓜| 亚洲色另类| 三级成人网站| 九九热av| 久久码久久无清| 欧美顶级少妇做爰HD| 五月婷婷激情| 丁香五月天在线| 97色色色视屏| AV网站免费在线| 中文字幕欧美精品久久| 激情网五月天| 少妇高潮一区二区三区99欧美| 色五开心五月五月深深爱| 人人草成人视频| 六月丁香六月婷婷欧美| 丁香六月丁香婷婷激情| 色爱综合网| 欧美综合五月丁香六月婷| 久久日韩婷婷五月| 亚洲精品V天堂中文字幕| 开心五月综合激情网| 国产午夜一区二区三区| 婷婷色播综合五月| 色噜噜狠狠色综合无码久久欧美| 激情性爱网站| 九九九九九九九九九九九九九九九九九九九在线视频 | 日本在线噜噜| 99re这里只有精品国产99| 日本色99| 超碰人人操| 2021日韩无码| 久久探花91swag| 99干日日干| 99精品成人无码A片观看金桔| 日日干天天射| 91视频五月丁香| 日日噜噜夜夜狠狠久久丁香六月| 色婷婷九月| 激情五月五月五月婷婷| 无码毛片992367| 99在线观看精彩视频| 五月色综合| 激情婷婷五月天| 丁香五月综合| 免费婷婷| 爽极品色| 久久久久9| 婷婷99视频精品| 色综合久久综合中文综合网| 五月天婷婷色色网| 国产成人在线不卡AV| 久久9热| 九九热99免费视频| 91婷色| 激情四射五月天| 99热99色| 天天人人综合| 丁香五月AV在线| 热99视频精品| 丁香五月天婷婷中文| 操逼123网| 激情小说 五月天| 综合激情五月天六月婷免费视频| 日夜夜久久| 五月天网站免费欧美| 激情深爱五月天| 日本色99| 开心激情五月天网| 色色五月婷婷| 国产精品久久久久9999小说| 婷婷丁香中文字幕| 激情婷婷99| 9久热在线视频精品| 丁香六月婷婷| 综合狠狠五月婷婷| 婷婷五月色亚洲| 激情五月天影院| 九月婷婷久久久| 99精品在线| 五月开心色| 天天操天天干天天日| 91一起艹| 综合五月天| av操B网站| 色在线99| WWW色综合| 天天成人丁香美女AV| 丁香五月婷老师| 色婷网| 日本人妻伦在线中文字幕| 操草草草| 久久99操| wwwxxx五月婷婷小说| 激情五月天社区| 99热免费精品| 韩国中文字幕91| 丁香视频| 色五月丁香总合网| 色色五月婷婷丁香| 91偷拍视频| 7EzOBIhNq85TO| 色婷婷激情四射视频| 五月婷婷开心色伊人| 九九综合久久| 123日本不卡在线| 人人综合久| 欧美天天干五月丁香| 思思热视频| 99热精品在线在线| 色婷综合| 五月天国产成人| 夜丁香综合| 久9视频| 超碰五月婷婷五月天| 日本99视频| www,婷婷| 色五月婷婷网| 色色婷婷婷丁香五月天| 五月丁香婷婷网网网网| 亚洲精品午夜国产va久久成人| 色婷婷丁香五月| 婷婷五月丁香成人网| 色五月婷婷婷婷婷婷婷婷婷婷| 996日日爱| 99热伊人| 91丨九色丨熟女丰满| 色五月开心开心五月激情五月| 99热综合在线| 亚洲一二三网| 久婷婷五月激情| 久久久久网站| 亚洲超碰青涩| 综合在线网| 中文字幕综合| #NAME?| 婷婷丁香五月天在线视频| 久久久五月五丁香| 五月综合激情网| 丁香五月婷婷亚洲色图| 色哟哟www| 天天久久婷婷| 五月天成人网婷婷| 婷婷五月天丁香| 91综合在线观看首页| 激情五月天网页| 免费视频无码| 无码啪啪| 日韩一级网站| 99热99re6国产在线播放| 开心五月婷婷激情| 国产成人av在线播放| 五月天六月色| 久月久在线视频| 丁香五月婷婷丫| 成人在线视频网| 操人91| 亚洲AV人人操| cao久久| 色欲一区二区三区精品A片| 亚洲婷婷性爱| 人妻系列久久久久久久久久久| 激情av| 色婷婷在线播放| 超碰97干| 亚洲婷婷久久综合| 思思热视频在线| 五月天激情日色在线| 人妻自慰高清合集| 色色色com| 激情久久五月网| 国产精品久久久久久久久久免费| 久久五月天激情美女| 91久久婷婷| 色欲av伊人久久大香线蕉影院| 亚洲情色一区| 久久草中文日韩欧美| 色欲五月婷婷| 26UUU欧美激情一区二区| 五月丁香综合影院| 婷婷五月天网址| 婷婷五月综激情| 中文无码婷婷| 色情五月婷婷| 《诡秘之主》在线观看| 丁香五月婷婷网| 婷婷五月天视| 超碰v| 五月天婷婷永久免费视频| 99ri网站在线观看| 丁香色综合| 性爱五月婷婷| 欧美视频五区| 丁香无月在线观看|