brucel51 2016-03-13 14:01 采纳率: 0%
浏览 2049

使用 mysql c api 中,预处理查询条件 当过滤字段是字符串时

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

int main(void)
{
    // declares
    MYSQL * connection = NULL;
    MYSQL_STMT * stmt = NULL;
    MYSQL_BIND bind[3];
    MYSQL_BIND inbind;

    // preprocess
    bzero(bind, sizeof(bind));
    bzero(&inbind, sizeof(inbind));

    // declare MYSQL * ptr
    connection = mysql_init(NULL);
    if (NULL == connection)
    {
        fprintf(stderr, "mysql_init err!");
        return -1;
    }

    // connect
    connection = mysql_real_connect(connection, "localhost", "root", "root", "dblinuxcmysqlctr", 0, NULL, 0);
    if (NULL == connection)
    {
        fprintf(stderr, "mysql_real_connect err!");
        return -1;
    }

    /* 1. init */
    stmt = mysql_stmt_init(connection);

    /*   ********************************************************       */


    //char * insertsql = "select name from tlinuxcmysqlctr where age = ?;";

  // 这里不就可以过滤了,过滤出来没有数据,是为啥呀?
    char * insertsql = "select name from tlinuxcmysqlctr where name = ?;";


    /*   ********************************************************       */


    /* 2. prepare */
    if(mysql_stmt_prepare(stmt, insertsql, strlen(insertsql)))
    {
        printf("mysql_stmt_prepare err!\n");
        return -1;
    }
    char inpara1[50] = {0};
    //int inpara1 = 4;
    char outpara1[50] = {0};

    //bind[0].buffer_type = MYSQL_TYPE_LONG;
    //bind[0].buffer = &inpara1;
    //bind[0].buffer_length = sizeof(inpara1);
    bind[0].buffer_type = MYSQL_TYPE_STRING;
    strcpy(inpara1, "hello");
    bind[0].buffer = inpara1;
    bind[0].buffer_length = sizeof(inpara1);

    bind[1].buffer_type = MYSQL_TYPE_STRING;
    bind[1].buffer = outpara1;
    bind[1].buffer_length = 50;

    /* 3. bind_param */
    mysql_stmt_bind_param(stmt, bind + 0);

    /* 4. execute */
    if (mysql_stmt_execute(stmt))
    {
        printf("sorry\n");
    }
    else
    {
        /* 3.5 */
        mysql_stmt_bind_result(stmt, bind + 1);
        printf("bind[0].buffer = %s\n", (char *)bind[0].buffer);
        if (0 != mysql_stmt_store_result(stmt))
        {
            printf("store result stmt err\n");
            return -1;
        }
        else
        {

            printf("----------------------------table data--------------------------------\n");
            while (!mysql_stmt_fetch(stmt))
            {
                printf("name = %s\n", outpara1);
            }
        }
        mysql_stmt_free_result(stmt);
    }

    /* 5. close */
    mysql_stmt_close(stmt);

    // mysql_close
    mysql_close(connection);

    return 0;
}

  • 写回答

1条回答

  • threenewbee 2016-03-13 14:03
    关注
     char * insertsql = "select name from tlinuxcmysqlctr where `name` = ?;";
    

    name是关键字

    评论

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。