-1

我正在使用一个连接到ANSI C中我的mysql数据库(本地)的mysql片段。一切都运行良好,但我一直在尝试创建一个连接到我的数据库并根据一些变量插入新记录的函数。我正在使用 sprintf 来捕捉这些变量并将它们拼凑在一起以形成我的 SQL 查询。

问题

准备好变量和 SQL 后,我将其发送到 mysql_query。不幸的是,这并没有按预期工作,程序崩溃并报告缓冲区溢出。

以下是可能有助于解释问题的整体功能。

#include <mysql.h>
#include <string.h>
#include <stdio.h>

char *table = "test_table"; // table is called test_table
char *column = "value"; // column is called value
char *value = "working"; // what value we are inserting
char *query; // what we are sending to mysql_query

sprintf(query, "INSERT INTO %s (%s) VALUES ('%s')", table, column, value);

if (mysql_query(conn, query)) {
  fprintf(stderr, "%s\n", mysql_error(conn));
  return;
}

目的

整体功能的目的是让我不必在我的程序中不断重写 SQL 插入或更新语句。我想调用一个函数并传递一些参数来标识表、列和所述列的值。

非常感激任何的帮助。这些天我对C有点生疏了。

问题

为什么 mysql_query 无法发送字符串?

变化

这根据评论起作用。

const char *query[MAX_STRING_LENGTH];

sprintf((char *)query, "INSERT INTO %s (%s) VALUES ('%s')", table, column, value);

if (mysql_query(conn, (const char *)query)) {
4

1 回答 1

1

您没有query.

它要么设置为 NULL 要么设置为某个不确定的值,具体取决于其存储持续时间,这两者都不会很好地结束:-)

快速修复是将其更改为

char query[1000];

尽管任何值得他们薪水的编码员也会检查以确保没有发生缓冲区溢出。

于 2013-08-24T22:09:00.267 回答