gpt4 book ai didi

mysql - 最近从 sqlite 切换到 mysql。需要在c中转换一些代码

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:58 24 4
gpt4 key购买 nike

我正在编写 C 程序来访问数据库。我最近从 sqlite 切换到 mysql。我不熟悉 mysql c api,所以我需要帮助转换一些代码。

下面的例子是执行带参数的sql语句。

sqlite:

char *zSQL = sqlite3_mprintf("SELECT price FROM warehouse WHERE p_ID='%q'", input_value);
sqlite3_prepare_v2(handle,zSQL,-1,&stmt,0);

我在 mysql 中的尝试:

char zSQL[60] = {'\0'};
int n = 0;

n = sprintf(zSQL, "SELECT price FROM warehouse WHERE p_ID='%s'", input_value);
mysql_real_query(conn, zSQL, n);

另一个例子是将sql语句的结果解析为变量

sqlite:

double price_value = 0;
if (sqlite3_step (stmt) == SQLITE_ROW) {
price_value = sqlite3_column_double (stmt, 0);
}

数据库:

MYSQL_ROW row;
while ((row = mysql_fetch_row(result)))
{
price_value = atof(row[0]);
}

虽然 mysql 中的代码对我有用,但我觉得我没有充分利用 API。mysql c api 中是否有与 sqlite3_mprintf()sqlite3_column_double() 具有相同功能的函数?

编辑:我对 mysql_real_escape_string() 的尝试:

ulong in_length = strlen(input_value);
char input_esc[(2 * in_length)+1];

mysql_real_escape_string(conn, input_esc, input_value, in_length);
char sql_stmnt[56] = {'\0'};

n = sprintf(zSQL, "SELECT price FROM warehouse WHERE p_ID='%s'", input_esc);
mysql_real_query(conn, sql_stmnt, n);

最佳答案

对于您的第一个示例,简短的回答是否定的,您必须自己做,请参阅 http://dev.mysql.com/doc/refman/5.5/en/mysql-real-escape-string.html

 unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)

第二个,是的,这是要走的路,需要额外检查 row[0] 确实是 double 类型。

或者,您可以使用准备好的语句 API,它的工作方式与 sqlite3 中的 API 非常相似。关键是您提供 MYSQL_BIND 类型的缓冲区,然后将输入绑定(bind)到它,或者在那里有 mysql 绑定(bind)输出值。

准备好的声明文档:http://dev.mysql.com/doc/refman/5.5/en/c-api-prepared-statement-data-structures.html

关于mysql - 最近从 sqlite 切换到 mysql。需要在c中转换一些代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9767112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com