最近从sqlite切换到mysql。需要在c中转换一些代码
我正在写C程序来访问数据库。 我最近从sqlite切换到mysql。 我不熟悉mysql c api,所以我需要帮助转换一些代码 下面的示例是使用参数执行sql语句 sqlite:最近从sqlite切换到mysql。需要在c中转换一些代码,mysql,c,api,sqlite,Mysql,C,Api,Sqlite,我正在写C程序来访问数据库。 我最近从sqlite切换到mysql。 我不熟悉mysql c api,所以我需要帮助转换一些代码 下面的示例是使用参数执行sql语句 sqlite: char*zSQL=sqlite3\u mprintf(“从仓库中选择价格,其中p\u ID='%q',输入值); sqlite3\u prepare\u v2(句柄,zSQL,-1,&stmt,0); 我在mysql中的尝试: char zSQL[60]={'\0'}; int n=0; n=sprintf(zS
char*zSQL=sqlite3\u mprintf(“从仓库中选择价格,其中p\u ID='%q',输入值);
sqlite3\u prepare\u v2(句柄,zSQL,-1,&stmt,0);
我在mysql中的尝试:
char zSQL[60]={'\0'};
int n=0;
n=sprintf(zSQL,“从仓库中选择价格,其中p_ID='%s',输入_值);
mysql_real_查询(conn,zSQL,n);
另一个例子是将sql语句的结果解析为变量
sqlite:
双倍价格\u值=0;
如果(sqlite3_步骤(stmt)=SQLITE_行){
price\u value=sqlite3\u column\u double(stmt,0);
}
mysql:
MYSQL\u行;
while((row=mysql\u fetch\u row(result)))
{
price_value=atof(第[0]行);
}
虽然mysql中的代码适合我,但我觉得我没有充分利用API。
mysql c api中是否有与sqlite3\u mprintf()和sqlite3\u column\u double()具有相同功能的函数
编辑:
我尝试使用mysql\u real\u escape\u string()
:
ulong in_length=strlen(输入值);
字符输入[2*英寸长度)+1];
mysql\u real\u escape\u字符串(conn,input\u esc,input\u value,in\u length);
字符sql\u stmnt[56]={'\0'};
n=sprintf(zSQL,“从仓库中选择价格,其中p_ID='%s',输入'u esc”);
mysql\u real\u query(conn,sql stmnt,n);
对于您的第一个例子,简短的回答是“不”,您必须自己做,请参见
第二个,是的,就是这样,需要额外检查行[0]
是否确实是double类型
或者,您可以使用prepared语句API,其工作原理与sqlite3中的非常类似。关键是提供类型为MYSQL\u BIND
的缓冲区,然后将输入绑定到该缓冲区,或者将MYSQL绑定输出值
准备好的报表文档:我找到了这个。它和我的很相似。我可以只使用mysql\u real\u escape\u string()
input\u value
吗?请看我的帖子,了解我在mysql\u real\u escape\u string()中的尝试。
unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)