我在mysql和linux C的开发过程中遇到了一个问题。 由于程序使用临时params,所以我认为它不会影响以下的sql查询。但是我的测试失败并报告错误:2014年。
我使用的程序是:
delimiter //
drop procedure if exists pbx_r_eid_svcid;
CREATE PROCEDURE `pbx_r_eid_svcid`(IN input_eid varchar(16))
begin
declare exe_result int default -1;
declare out_svcip varchar(64) default "";
declare out_svcport varchar(64) default "";
select exe_result,out_svcip,out_svcport;
end;//
delimiter;
C代码:
#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
MYSQL *mysql;
int timeout=atoi(argv[1]);
char escape[64] = "";
char orig[64] = "";
char buf[128] = "";
int rc = 0;
MYSQL_RES *res;
mysql = mysql_init(NULL);
mysql_options(mysql, MYSQL_OPT_READ_TIMEOUT, &timeout);
mysql_options(mysql, MYSQL_OPT_WRITE_TIMEOUT, &timeout);
mysql_real_connect(mysql, "127.0.0.1", "root", "123456", "center_distribute", 3306,"/var/run/mysqld/mysqld.sock", CLIENT_FOUND_ROWS | CLIENT_MULTI_STATEMENTS);
snprintf(buf,128, "call pbx_r_eid_svcid('00000002')", "11");
if (mysql_real_query(mysql,buf,strlen(buf)))
{
int err_no = mysql_errno(mysql);
fprintf(stderr, "Failed to insert row, Error: %d %s\n", err_no,
mysql_error(mysql));
}
res = mysql_store_result(mysql);
if(0 == mysql_affected_rows(mysql) || res == NULL)
{
rc = 6;
goto end;
}
mysql_free_result(res);
snprintf(buf,128,"select * from enterprise_info;");
/******************************/
/*wrong query return out of sync*/
if (mysql_real_query(mysql,buf,strlen(buf)))
{
int err_no = mysql_errno(mysql);
fprintf(stderr, "Failed to insert row, Error: %d %s\n", err_no,
mysql_error(mysql));
}
res = mysql_store_result(mysql);
if(0 == mysql_affected_rows(mysql) || res == NULL)
{
rc = 7;
goto end;
}
mysql_free_result(res);
end:
printf("%d\n",rc);
mysql_close(mysql);
return 0;
}
第二个mysql select将repsonse不同步错误
测试结果: ./mt 5
无法插入行,错误:2014命令不同步;你不能这样做 现在命令
7
任何评论都应该有所帮助。 感谢。