为什么带单引号的字符串在插入DB时会引发错误?

时间:2011-02-26 08:04:45

标签: php mysql string quotes apostrophe

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

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

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

有什么建议吗?

4 个答案:

答案 0 :(得分:8)

不会以任何方式禁止单引号。我只是假设你在插入数据库时​​遇到错误。这可能是由于输入值上遗漏了mysql_real_escape_string()

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

  

(这就是为什么magic_quotes最初被引入的原因:让SQL为新手开箱即用。 - 不要让它特别安全。)

答案 1 :(得分:5)

对插入数据库的任何文本使用mysql_real_escape_string()函数。如果要将数据直接发布到数据库中,则可能在脚本中出现错误,因为您实际执行的操作是结束MySQL引用。

您逃避数据也是一种安全必需品。以下是你应该拥有的东西:

$q = "INSERT INTO `table` (`body`) VALUES ('".mysql_real_escape_string($_POST['body'])."')";

答案 2 :(得分:2)

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

对抗SQL注入攻击的最简单方法是使用prepared statements编写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();
?>

答案 3 :(得分: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."')