Sqlite 插入给出语法错误

Sqlite insert gives syntax error

我正在从事 flex actionscript 项目。我将在 sqlite 数据库中获取 save/insert 记录,这是我的回应。

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

near '/': syntax error

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

我在 for loop 中有 written/execute 查询,例如:

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();

我也试过用 " 代替 ',反之亦然。

但它给出了 '

的其他错误

Error #3115: SQL Error.

near 'll': syntax error


near '_blank': syntax error

如有任何帮助,我们将不胜感激。

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

为了避免这样的问题,你可以像这样使用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();

希望能帮到你。