Получение пустой строки в подготовленном / связанном запросе параметров SQLite на C - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь выполнить простой запрос SELECT, используя C и SQLite3, я делаю это раньше, но по какой-то странной причине сейчас не работает, база данных очень проста:

CREATE TABLE service(
id integer primary key autoincrement,
name text,
url text);

C код таков:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <sqlite3.h>

int error(char *message, sqlite3 *db) {
  fprintf(stderr, "[ %s ] Error: %s\n", message, sqlite3_errmsg(db));
  return SQLITE_ERROR;
}

void usage(char *appname) {
  printf("Usage: %s <service-name>\n", appname);
  exit(EXIT_FAILURE);
}

int main(int argc, char * argv[]){

  if (argc < 2) {
    usage(argv[0]);
  }

  sqlite3_stmt *stmt = NULL;
  sqlite3 *db = NULL;
  int rc;

  const char *service_name = NULL;

  int idx = -1;

  char *sql = "select * from service where name is :name";
  int sql_len = strlen(sql);

  sqlite3_initialize();

  rc = sqlite3_open_v2("getip.db", &db, SQLITE_OPEN_READWRITE, NULL);
  if (rc != SQLITE_OK)
    error("Connecting to database", db);

  rc = sqlite3_prepare_v2(db, sql, sql_len, &stmt, NULL);
  if (rc != SQLITE_OK)
    error("Preparing statement", db);

  char *service_search = argv[1];
  idx = sqlite3_bind_parameter_index(stmt, ":name");
  rc = sqlite3_bind_text(stmt, idx, service_search, strlen(service_search),
      SQLITE_STATIC);

  rc = sqlite3_step(stmt);
  service_name = sqlite3_column_text(stmt, 2);

  printf("[debug] Last code: %d\n", rc);
  printf("[debug] SQL: %s\n", sqlite3_sql(stmt));

  printf("Name: %s\n", service_name);

  sqlite3_finalize(stmt);
  return EXIT_SUCCESS;
}

, который должен возвращать значение столбца 'url', но возвращать ноль, и еще одно небольшое сомнение в том, что в документации SQLite3.org упоминается функция для получения SQL из оператора 'extended' (char * sqlite3_expanded_ sql (sqlite3_stmt * pStmt);), но при компиляции я получаю:

неопределенную ссылку на `sqlite3_expanded_ sql '

последнее сомнение не важно, настоящая головная боль - первая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...