【问题标题】:Sqlite insert gives syntax errorSqlite 插入给出语法错误
【发布时间】:2016-03-23 09:28:50
【问题描述】:

我正在开发 flex actionscript 项目。我将在sqlite 数据库中保存/插入记录,我得到了响应。

但是,记录一些记录的表格没有插入到表格中。当我发现错误时,它会给出 sql 错误。

'/' 附近:语法错误

作为回应,我得到了整个 html 标记。

我已经在for loop 中编写/执行查询,例如:

var insert:SQLStatement = new SQLStatement(); 
insert.sqlConnection = sqlConnectionSync;
insert.text = 'INSERT OR IGNORE INTO TableName (MessageID, AccountID, Body) VALUES ("' + listArray[i].MessageID + '","' + listArray[i].AccountID + '","' + listArray[i].Body + '")';
insert.execute();

我也尝试将" 更改为',反之亦然。

但它给出了'的其他错误

错误 #3115:SQL 错误。

'll' 附近:语法错误

还有

'_blank' 附近:语法错误

任何帮助将不胜感激。

【问题讨论】:

    标签: sqlite actionscript-3 apache-flex


    【解决方案1】:

    为避免此类问题,您可以像这样使用SQLStatement.parameters 属性,例如:

    var insert:SQLStatement = new SQLStatement(); 
    
        insert.text = 'INSERT OR IGNORE INTO TableName (MessageID, AccountID, Body) VALUES (:param1, :param2, :param3)';
    
        insert.parameters[':param1'] = listArray[i].MessageID;
        insert.parameters[':param2'] = listArray[i].AccountID;
        insert.parameters[':param3'] = listArray[i].Body;
    
        insert.execute();
    

    希望能有所帮助。

    【讨论】:

    【解决方案2】:

    将完整的查询作为文本发布会有所帮助,但您的数据中很可能包含 " 或 ' 字符(如 ...="_blank" 或 "You'll")。您需要先转义变量值将它们插入数据库。我已从您的示例中切换了“和”:

    insert.text = "INSERT OR IGNORE INTO TableName (MessageID, AccountID, Body) VALUES ('" + escapeChars(listArray[i].MessageID) + "','" + escapeChars(listArray[i].AccountID) + "','" + escapeChars(listArray[i].Body) + "')";
    
    private function escapeChars(myString:String):String
    {
       // Since we are using "'" we'd need to escape all other "'" characters
       return myString.replace(/'/gi, "\'");
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多