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();
希望能帮到你。
我正在从事 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();
希望能帮到你。