我的Android应用程序正在向我的服务器发送消息(PHP脚本) PHP脚本正在将消息写入MySQL。
它工作正常,但所有包含撇号的消息(例如他上学)都没有写入数据库。
这里是php脚本:
function deq($s)
{
if($s == null)
return null;
return
get_magic_quotes_gpc() ?
stripslashes($s) : $s;
}
if(md5(deq($_REQUEST['blub']).deq($_REQUEST['blub'])."blabla") == $_REQUEST['hash']){
mysql_connect("localhost", "blub", "blub") or die(mysql_error());
mysql_select_db("blub") or die(mysql_error());
// mysql_set_charset('UTF8'); // does not work as too old php
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");
$mysqldate = gmdate( 'Y-m-d H:i:s');
$language = (int) $_REQUEST['language'];
$device = $_REQUEST['device'];
$ipaddress = $_SERVER['REMOTE_ADDR'];
mysql_query("INSERT INTO test(username, text, language, rating, checked, date)
VALUES('".$_REQUEST['username']."', '".$_REQUEST['text']."', '".$language."', '0' , 'false', '".$mysqldate."') ")
or die(mysql_error());
mysql_close();
答案 0 :(得分:2)
所有你需要逃脱'
,如下所示
$_REQUEST['text'] = mysql_real_escape_string($_REQUEST['text']);
答案 1 :(得分:1)
不要使用魔法引号。 如果您不想使用mysqli,请使用mysqli_real_escape_string或mysql_real_escape_string。
答案 2 :(得分:1)
您已发现SQL injections:输入中的撇号“退出”您放入查询的撇号。这会导致某些输入被视为查询的一部分。在查询中使用输入之前,可以使用mysql_real_escape_string
保护输入。但总的来说,有更好的解决方案(例如准备好的陈述)。
顺便说一下,你使用PHP中过时的mysql_
函数(参见http://php.net/mysql_query上的大红色警告)
答案 3 :(得分:1)
查看上面的描述,您需要使用mysql_real_escape_string函数以斜杠转义输入数据
在sql查询中使用时输入数据中的撇号会破坏导致sql注入的sql查询
所以在使用sql查询之前总是使用mysql_real_escape_string()函数清理输入数据
有关mysql_real_escape_string()函数的更多文档,请参阅以下url中提到的文档
http://php.net/manual/en/function.mysql-real-escape-string.php