【问题标题】:insert string value with apostrophe插入带撇号的字符串值
【发布时间】:2011-05-12 23:04:12
【问题描述】:

考虑一个需要插入到 SQLite 表中的带有撇号的字符串。

INSERT INTO myTable ( table_Title TEXT ) VALUES ( 'world's' )

如何在INSERT 语句的值中标记或转义撇号?

【问题讨论】:

    标签: iphone objective-c sqlite


    【解决方案1】:

    http://www.sqlite.org/c3ref/bind_blob.html

    您不应该像这样将输入作为字符串直接传递到查询中。它不仅令人讨厌,而且还容易受到 SQL 注入攻击,这对于 Mac 应用程序来说可能不是一个大问题,但当您使用准备好的语句时仍然是一个坏主意。准备好的语句确保底层数据库安全地读取实际的、未修改的输入值。

    对于您的具体示例(为简洁/清晰起见,删除了错误检查):

    sqlite3 *db;
    sqlite3_open("test.db", &db);
    
    // Create a prepared statement
    sqlite3_stmt *stmt;
    const char *sql = "INSERT INTO myTable (table_Title TEXT) VALUES (?)";
    sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
    
    // Bind the parameter (safely)
    sqlite3_bind_text(stmt, 1, "world's", -1, NULL);
    
    // Execute the prepared statement
    sqlite3_step(stmt);
    

    (未经测试,但你明白了)。

    【讨论】:

      【解决方案2】:

      您可以使用 '' 而不是单个撇号。
      插入示例还没有
      Insert into table_name values('haven''t');

      参考:https://www.sqlite.org/faq.html#q14

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-09
        • 2020-04-27
        • 1970-01-01
        相关资源
        最近更新 更多