gpt4 book ai didi

mysql - 将 sprintf 与 mysql_query 结合使用

转载 作者:行者123 更新时间:2023-11-30 19:22:05 26 4
gpt4 key购买 nike

我正在使用一个 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)) {

最佳答案

您没有用于查询的后备存储。

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

快速修复是将其更改为

char query[1000];

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

关于mysql - 将 sprintf 与 mysql_query 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423576/

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