1 -- 訪問二進位制資料可行性分析
考慮1:函式mysql_query儲存二進位制資料,可行不?也行也不行,比如sql語句中恰好含有'\0',而mysql_query又是以'\0'表示sql語句結束,這樣sql語句被截斷就不完整了。檢視幫助發現還有乙個mysql_real_query,最妙的是它不是使用'\0'終結sql,而是用乙個整形數表示sql語句的長度。
考慮2:函式mysql_real_query規避了'\0'可能引起的麻煩。如果sql中的二進位制資料是「'」、「"」這些特殊字元呢?看來還得用mysql_real_escape_string過濾下,才能放心使用。
考慮3:經過上面的兩步後,儲存二進位制資料基本上沒什麼問題。那怎麼將其讀出來呢?如果直接將讀出的資料賦值給string,有可能被截斷。解決方法是,先呼叫mysql_fetch_lengths獲得值的長度,然後按長度copy資料。
2 -- 例項程式
三個關鍵函式:
int mysql_query(mysql *mysql, const char *query);int mysql_real_query(mysql *mysql, const char *query, unsigned long length);
unsigned long mysql_real_escape_string(mysql *mysql, char *d, const char *s, unsigned long len);
#include #include #include "mysql.h"const std::string escape(mysql * phandle, const std::string & sfrom)
int main()
}mysql_res * pres = mysql_store_result(phandle);
for (mysql_row strow = null; (strow = mysql_fetch_row(pres)) != null; )
std::cout << "text:" << stext << "|size:" << stext.size() << std::endl;
for (std::string::size_type i = 0; i < stext.size(); i++)}}
return 0;
}
makefile檔案:
include := -i/usr/local/mysql/include/mysqllib := -l/usr/local/mysql/lib/mysql -lmysqlclient
all : main
main : main.cpp
g++ -wall -o main main.cpp $ $
clean :
rm -rf main *.o
建表sql語句:
create table `t_testsz` (`id` int(11) not null auto_increment,
`myname` varchar(200) not null default '',
`mytext` varchar(200) not null default '',
primary key (`id`)
) engine=myisam default charset=gbk
mysql訪問二進位制資料
1 訪問二進位制資料可行性分析 考慮1 函式mysql query儲存二進位制資料,可行不?也行也不行,比如sql語句中恰好含有 0 而mysql query又是以 0 表示sql語句結束,這樣sql語句被截斷就不完整了。檢視幫助發現還有乙個mysql real query,最妙的是它不是使用 0 ...
mysql二進位制 MySql二進位制連線方式詳解
使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示視窗,你可以...
mysql二進位制恢復 mysql二進位制日誌恢復
二進位制日誌匯出 1.按時間節點匯出 no defaults 用來對mysql5.5之前mysqlbinlog命令報錯 mysqlbinlog no defaults start date 2017 08 08 15 04 04 stop date 2017 08 08 15 12 00 progr...