人, 来自以下代码
int a = mysql_query(conn,"INSERT into data VALUES (NULL,'tes','aja'));
为什么我可以确保mysql_query做了所谓的事情,因为我尝试了错误的SQL查询并且它变成了相同的返回值
来自文件mysql.h的mysql_query函数:
int STDCALL mysql_query(MYSQL *mysql, const char *q);
有没有办法检查查询字符串是否有效并正确查询?
答案 0 :(得分:0)
根据MySQL reference documentation for mysql_query,这应该在成功时返回零,在失败时返回非零。您确定它为无效查询返回0值吗?
答案 1 :(得分:0)
我很惊讶我必须使用的MySQL数据库没有在“错误查询”上返回错误。 (MySQL数据库不在我的管理中)你没有写下你的查询确切的问题;问题是什么。我想我的问题可能和你的问题类似。
(简化了示例表。)
我的表'T'用cols'A'varchar [10] not null,'B'varchar [10]
int a = mysql_query(conn,"INSERT INTO T (B) VALUE ('data')");
问题是结果没问题,错误信息为空,只有一个警告。
解决方案不仅要测试错误,还要测试警告。
if ( mysql_errno( conn ) || mysql_warning_count( conn ) )
result = 1; //error
else
result = 0; //OK
如果您需要显示警告/错误,可以使用我的简单示例代码:
static void display_warnings( MYSQL *conn )
{
MYSQL_RES *sql_result;
MYSQL_ROW row;
if ( ( conn == NULL ) || mysql_query( conn, "SHOW WARNINGS" ) )
{
printf( "Can not display list of errors/warnings!\n" );
return;
}
sql_result = mysql_store_result( conn );
if ( ( sql_result == NULL ) || ( sql_result->row_count == 0 ) )
{
printf( "Can not display list of errors/warnings!\n" );
if ( sql_result )
mysql_free_result( sql_result );
return;
}
row = mysql_fetch_row( sql_result );
if ( row == NULL )
{
printf( "Can not display list of errors/warnings!\n" );
mysql_free_result( sql_result );
return;
}
do
{
// Format: "message [Type: number]"
printf( "%s [%s: %s]\n", row[2], row[0], row[1] );
row = mysql_fetch_row( sql_result );
} while ( row );
mysql_free_result( sql_result );
}
我需要处理所有给定数据必须正确且没有遗漏。缺少数据(根据表定义)是不可接受的;修剪数据('ABC12345678'更改为'ABC1234567')也是不可接受的。这两个问题仅作为警告处理。因此,我将所有警告都视为错误。