Sqlite insert提供语法错误

时间:2016-03-23 09:28:51

标签: sqlite actionscript-3 flex

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

但是,记录某些记录的表单不会插入到表中。当我发现错误时,它会给出sql错误。

  

near' /':语法错误

作为回应,我有完整的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错误。

     

near' ll':语法错误


  

near' _blank':语法错误

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:2)

为避免此类问题,您可以使用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();

希望可以提供帮助。

答案 1 :(得分:0)

将完整查询作为文本发布会有所帮助,但很可能您的数据中包含“或”字符(例如...... =“_ 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, "\'");
}