-2

我正在尝试开发一个android应用程序,这个脚本将在我的手机上复制一个数据库表,但是执行后他在下面显示这个错误

//---------------Copier-------------------------    

 $.ajax({
         type: "POST",
         url: "http://10.0.2.2:1998/bYzance_web_service/get_all_PhrasesTypes.asmx/Get_all_PrasesTypes",
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         async : false,
         success: function (data)
          {
             alert("success: function (data)");

             var result = $.parseJSON(data.d); 

             alert(result[0].Phrase);

             for (i = 0; i < result.length; i++) 
             {                 
                 tx.executeSql("INSERT INTO PhrasesTypes (idPhrase,idPhraseES,idRubrique,idTypeTravauxAffichage,Phrase,AidePhrase,AvertissementPhrase,OrdrePhrase,QuotationParDefaut,Published)"
+  " VALUES ('"+result[i].IdPhrase+"',' "+result[i].IdPhraseES+" ',' "+result[i].IdRubrique+" ',' "+result[i].IdTypeTravauxAffichage+" ','"+mysql_real_escape_string(result[i].Phrase)+"',' "+result[i].AidePhrase+" ',' "+result[i].AvertissementPhrase+" ','"+result[i].OrdrePhrase+"','"+result[i].QuotationParDefaut+"','"+result[i].Published+" ')");
       console.log(i);
    }

         },
         error: function (e)
          {
            alert("URL du web service:  "+serviceURL+"get_all_PhrasesTypes.asmx/Get_all_PrasesTypes");

         }

     });//fin Ajax

sqlite 返回:错误代码 =1,“accunedifined”附近的消息:语法错误

4

4 回答 4

1

看来该声明无效。您只需将字符串相加,甚至使用 function mysql_real_escape_string,这是一个 PHP 函数,除非您也在 Javascript 中定义了它。如果这些字符串中的任何一个包含无效字符,尤其是 a ',您的语句将变为无效。

最好的办法是找到一种方法来查看生成的 SQL。您可能会立即发现错误,但如果没有,您可以在此处发布生成的 SQL,以便我们查看。

于 2012-11-02T10:24:34.817 回答
0

在 youmysql_real_escape_string中,添加一些逻辑来复制单引号:

// Note: replaceAll doesn't work, you need to implement it
str = str.replaceAll("'","''");

一些replaceAll想法: 替换dom元素中的所有字符串

于 2012-11-02T11:32:43.023 回答
0

您可能想要 console.logresult数组值。我认为您有可能某些值包含使字符串 SQL 无效的单引号。'accunedifined在你的结果中寻找一个

于 2012-11-02T10:23:25.523 回答
0

mysql_real_escape_string将 PHP 代码复制到 JavaScript 后删除。

于 2012-11-02T10:23:30.377 回答