我需要一些帮助!
我在网站管理页面上有一个表单,所有者填写他的项目并将get添加到mysql数据库,但有时数据包含单引号或双引号,因此它不会添加到db。
我尝试使用addslashes但它仍然无法正常工作。
继承我试过的代码
$atitle = addslashes($_REQUEST['atitle']);
$acontent = addslashes($_REQUEST['acontent']);
$query = "INSERT INTO projects VALUES (NULL, '$atitle', '$acontent', '$remote_file', '$remote_file1', '$remote_file2')";
$result = mysql_query($query);
if(!$result){
$error = 'An error occured: '. mysql_error().'<br />';
$error.= 'Query was: '.$query;
echo $error;
die($message);
}
任何人都可以帮我吗?
答案 0 :(得分:0)
您可以尝试stripslashes()
取消引用带引号的字符串。有关详细信息,请参阅PHP文档网站here。
答案 1 :(得分:0)
mysql_query是一个不再支持的过时的php库的一部分。更可靠的与数据库交互的方法是mysqli。使用mysqli,您将能够使用Prepared Statements。准备语句是一种验证输入和缓解此类问题的方法(您的输入具有引号刻度/标记)。看一下这个例子:
$db = new mysqli("host","user","pw","database");
$stmt = $db->prepare("INSERT INTO projects VALUES (NULL, '?', '?', '?', '?','?')");
$stmt->bind_param('s', $atitle); // s means string in the first param
$stmt->bind_param('s', $acontent); // s means string in the first param
... // same for all other parameters in your query
$stmt->execute();
更多相关信息:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
我强烈推荐使用mysqli。它是最新的和支持的。准备好的语句是防范SQL注入的最佳方法,也是捕获这样的绊脚石的最佳方法。它将为您清理输入并考虑引号。