2

我的问题是:如何在字符串中允许单引号?

例如,我有一个表单和一个文本框。它被设置为允许用户输入他们的名字。从那里,它发布数据并将其输入数据库。

我需要能够允许单引号(撇号),因为有些人的名字中有撇号,例如“O'Reilly”。

有什么建议么?

4

4 回答 4

8

不以任何方式禁止单引号。我只是假设您将其插入数据库时​​出错。这可能是由于省略了mysql_real_escape_string()输入值。

如果您尝试INSERT ... ('O'Reilly')这是 SQL 转义函数的全部要点,您将收到一个 SQL 错误。

(这就是magic_quotes最初引入的原因:让 SQL 对新手来说开箱即用。 - 不是为了让它特别安全。)

于 2011-02-26T08:08:49.137 回答
5

对插入数据库的任何文本使用mysql_real_escape_string()函数。如果您将数据直接发布到数据库中,您的脚本中可能会出现错误,因为您实际所做的是结束 MySQL 报价。

逃避数据也是安全的必要条件。您应该拥有以下内容:

$q = "INSERT INTO `table` (`body`) VALUES ('".mysql_real_escape_string($_POST['body'])."')";
于 2011-02-26T08:10:44.440 回答
2

如果我正确地阅读了您的问题,那么您已经将SQL 注入错误编码到您的程序中,从而允许轻微恶意的人和病毒读取和写入您的数据库。(想象一下有人在';drop table users;一个字段中输入......再见数据。)

对抗 SQL 注入攻击的最简单方法是使用准备好的语句编写 SQL 查询,它要求数据库安全地处理输入数据:

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
于 2011-02-26T08:13:53.270 回答
0
           USe like:-

           insert into question(question,points,choice1,choice2,
           choice3,choice4,choice3_correct,tags,error_status,
           base_or_derived,language)    
           values('".mysql_real_escape_string($result4)."',
           '".$points."','".$ans1."','".$ans2."',
           '".$correct_ans."','".$ans3."','1','".$tags."',
            '".$error."','D','".$language."')
于 2012-03-19T13:02:04.140 回答