2

我只是从 C 和 MySQL C API 开始。我正在使用 mysql_query() 创建一个表。根据手册,函数用法是int mysql_query(MYSQL *mysql, const char *stmt_str),函数成功返回0,出错返回非零。但是,无论我使用if (mysql_query())还是if ! (mysql_query()),程序总是打印到标准输出,“错误 0:”。此外,在任何一种情况下,程序都会创建数据库和表。

#include <my_global.h>
#include <mysql.h>

int main (int argc, char **argv)
{
    MYSQL *connection;

    const char DATABASE[] = "test";
    const char HOSTNAME[] = "localhost";
    const char USERNAME[] = "root";
    const char PASSWORD[] = "123456";

    connection = mysql_init(NULL);

    if (connection == NULL)
    {
        printf("Error %u: %s\n", mysql_errno(connection), mysql_error(connection));
        exit(1);
    }

    if (mysql_real_connect(connection, HOSTNAME, USERNAME, PASSWORD, NULL, 0, NULL, 0) == NULL)
    {
        printf("Error %u: %s\n", mysql_errno(connection), mysql_error(connection));
        exit(1);
    }

    if (mysql_query(connection, "DROP DATABASE IF EXISTS test"))
    {
        printf("Error %u: %s\n", mysql_errno(connection), mysql_error(connection));
        exit(1);
    }

    if (mysql_query(connection, "CREATE DATABASE test"))
    {
        printf("Error %u: %s\n", mysql_errno(connection), mysql_error(connection));
        exit(1);
    }

    if (mysql_select_db(connection, DATABASE))
    {
        printf("Error %u: %s\n", mysql_errno(connection), mysql_error(connection));
        exit(1);
    }

    /* The problem that I do not understand is happening in the statement below.
     * It seems that a successful query returns zero, so I should not see "Error 0:"
     */
    if (mysql_query(connection, "CREATE TABLE jobs (id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, PRIMARY KEY (id), UNIQUE KEY name_index (name)) ENGINE=InnoDB DEFAULT CHARSET=utf8"));
    {
        printf("Error %u: %s\n", mysql_errno(connection), mysql_error(connection));
        exit(1);
    }

    mysql_close(connection);
}
4

2 回答 2

1

你只是放了一个分号; if语句的末尾,所以花括号之间的代码总是被执行!!!

拿走; 一切都会按预期进行

于 2013-01-19T09:54:06.583 回答
0

这在手册页中并不完全清楚,但我猜该函数的返回代码是错误代码。因此,您必须在变量中捕获该返回值,然后在出现错误时打印该变量的值。

于 2013-01-19T09:12:54.063 回答