我有一个iPhone应用程序,它将用户输入的数据提交给SQL数据库。它会导致错误,要么切断数据,要么在使用特殊字符时输入“null”。似乎撇号和问号以及句号都没问题,但除此之外的任何内容都会导致它切断帖子或者根本不发布任何内容。
我插入数据的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手动插入,我可以插入字符串“Testing& Seeing if this works”,没有任何问题。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脚本。
答案 0 :(得分:1)
使用mysql_real_escape_string
转义数据。作为一个丑陋但快速的解决方案,这看起来像
$cat = mysql_real_escape_string($cat);
$sub = mysql_real_escape_string($sub);
$body = mysql_real_escape_string($body);
mysql_query("INSERT INTO tblQA (intResponseID, intPosterID, dPostDateTime, cCategory, cSubject, cBody) VALUES ($id, $u, NOW(), '$cat', '$sub', '$body');");
你的特殊角色有多特别?如果它们是Unicode,则可能需要SET NAMES UTF8
中所述的{{1}}。
答案 1 :(得分:0)
尝试对数据进行URL编码,然后再将其发送到服务器并分别解码响应。 NSString有这方面的方法。
答案 2 :(得分:0)
不要通过字符串连接用户提供的数据来构建SQL查询。使用绑定参数(像PDO和ADODB这样的数据库抽象层在PHP中提供)。