撇号和引号不会从表单添加到mysql

时间:2013-06-14 11:45:18

标签: php mysql escaping character reserved

我需要一些帮助!

我在网站管理页面上有一个表单,所有者填写他的项目并将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);
  }

任何人都可以帮我吗?

2 个答案:

答案 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注入的最佳方法,也是捕获这样的绊脚石的最佳方法。它将为您清理输入并考虑引号。