我有一個iPhone應用程序,它將用戶輸入的數據提交給SQL數據庫。它會導致錯誤,或者切斷數據或者在使用特殊字符時輸入「null」。似乎撇號,問號和句號都可以,但除此之外的任何內容都會導致它切斷郵件或發佈任何內容。來自iPhone的特殊字符在SQL中導致POST錯誤
我的SQL查詢來插入數據如下:
mysql_query("INSERT INTO tblQA (intResponseID, intPosterID, dPostDateTime, cCategory, cSubject, cBody) VALUES ($id, $u, NOW(), '$cat', '$sub', '$body');");
在數據庫中的字段類型是一個varchar(8000)。所以,我知道由於字符的限制,它沒有被切斷。我使用的排序規則是「latin1_swedish_ci」
編輯:我再次測試。這是「&」,它在發佈到SQL數據庫時切斷字符串。如果我手工從phpMyAdmin插入,我可以插入字符串「測試&看到這是否工作」沒有問題。
iPhone代碼:
[p setObject:[NSString stringWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://website.com/script.php?user=%@&pass=%@&cat=%@&sub=%@&body=%@",[[p valueForKey:@"user"] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],[[p valueForKey:@"pass"] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],sport,@"",[[tvQ.text stringByReplacingOccurrencesOfString:@"\n" withString:@" "] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]]]] forKey:@"q"];
此外:
如果我手動插入與符號(&),它會出現在iPhone應用程序的字符串。僅在發佈功能上,它不起作用。
添加3:20p 8/10/10: 我已經做了一些額外的測試,並且INSERT查詢工作正常。我已經創建了一個單獨的腳本來從HTML頁面獲取輸入數據,並將其插入到其中的「&」符號中。似乎我需要看看iPhone是以字符串形式抓取並傳遞給PHP腳本的。
它的「&」字符正在切斷帖子 – BigMike 2010-08-10 15:55:39
「mysql_real_escape_string」似乎不允許該帖子發生。 $ body = mysql_real_escape_string(「'」,「'」,@ $ _ REQUEST ['body']); – BigMike 2010-08-10 16:49:09
您正在使用該功能不正確。刪除前兩個參數:'$ body = mysql_real_escape_string(@ $ _ REQUEST ['body']);' – MvanGeest 2010-08-10 17:28:16