支持在單個字符串中指定的多語句的執行。要想與給定的鏈接一塊兒使用該功能,打開鏈接時,必須將標誌參數中的CLIENT_MULTI_STATEMENTS
選項指定給mysql_real_connect()
。也能夠經過調用mysql_set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON)
,爲已有的鏈接設置它。mysql
經常使用套路:ios
/* Connect to server with option CLIENT_MULTI_STATEMENTS */
mysql_real_connect(..., CLIENT_MULTI_STATEMENTS);
/* Now execute multiple queries */
mysql_query(mysql,"DROP TABLE IF EXISTS test_table;\ CREATE TABLE test_table(id INT);\ INSERT INTO test_table VALUES(10);\ UPDATE test_table SET id=20 WHERE id=10;\ SELECT * FROM test_table;\ DROP TABLE test_table");
do
{
/* Process all results */
...
printf("total affected rows: %lld", mysql_affected_rows(mysql));
...
if (!(result= mysql_store_result(mysql)))
{
printf(stderr, "Got fatal error processing query\n");
exit(1);
}
process_result_set(result); /* client function */
mysql_free_result(result);
} while (!mysql_next_result(mysql));
具體看代碼:web
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dlfcn.h>
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <termios.h>
#include <mysql/mysql.h>
void process_result_set(MYSQL *mysql, MYSQL_RES *result)
{
int i =0;
unsigned int fieldnum;
//從結果集,獲取表頭信息
MYSQL_FIELD *fields = mysql_fetch_fields(result);
fieldnum = mysql_field_count(mysql);
for (i=0; i<fieldnum; i++)
{
printf("%s\t", fields[i].name);
}
printf("\n");
//從結果集, 按照行獲取信息信息
MYSQL_ROW row = NULL;
//從結果集中一行一行的獲取數據
while ( row = mysql_fetch_row(result))
{
fieldnum = mysql_field_count(mysql);
//優化,個人行有多少列。。。。查找這樣的api函數
for (i=0; i<fieldnum; i++) //通過測試 發現 不是以0結尾的指針數組。。
{
printf("%s\t", row[i]);
}
printf("\n");
}
}
int main()
{
int ret = 0, status = 0;
MYSQL *mysql;
MYSQL_RES *result;
MYSQL_ROW row;
char *query;
mysql = mysql_init(NULL);
mysql =mysql_real_connect(mysql, "localhost", "root", "123456", "mydb2", 0, NULL, CLIENT_MULTI_STATEMENTS);
if (mysql == NULL)
{
ret = mysql_errno(mysql);
printf("func mysql_real_connect() err\n");
return ret;
}
else
{
printf(" ok......\n");
}
/* execute multiple statements */
status = mysql_query(mysql,
"DROP TABLE IF EXISTS test_table;\ CREATE TABLE test_table(id INT);\ INSERT INTO test_table VALUES(10);\ UPDATE test_table SET id=20 WHERE id=10;\ SELECT * FROM test_table;\ DROP TABLE test_table");
if (status)
{
printf("Could not execute statement(s)");
mysql_close(mysql);
exit(0);
}
/* process each statement result */
do {
/* did current statement return data? */
result = mysql_store_result(mysql);
if (result)
{
/* yes; process rows and free the result set */
process_result_set(mysql, result);
mysql_free_result(result);
}
else /* no result set or error */
{
if (mysql_field_count(mysql) == 0)
{
printf("%lld rows affected\n",
mysql_affected_rows(mysql));
}
else /* some error occurred */
{
printf("Could not retrieve result set\n");
break;
}
}
/* more results? -1 = no, >0 = error, 0 = yes (keep looping) */
if ((status = mysql_next_result(mysql)) > 0)
printf("Could not execute statement\n");
} while (status == 0);
mysql_close(mysql);
}