我的问题是:如何在字符串中使用单引号?
例如,我有一个表单和一个文本框。它被设置为允许用户输入他们的名字。从那里,它将数据发布并提供给数据库。
我需要能够允许单引号(撇号),因为有些人的名字在他们的名字中有撇号,例如“O'Reilly”。
有什么建议吗?
答案 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."')