Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么带单引号的字符串在插入DB时会引发错误?_Php_Mysql_String_Quotes_Apostrophe - Fatal编程技术网

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

Php 为什么带单引号的字符串在插入DB时会引发错误?,php,mysql,string,quotes,apostrophe,Php,Mysql,String,Quotes,Apostrophe,我的问题是:如何允许字符串中使用单引号 例如,我有一个表单和一个文本框。它设置为允许用户输入其名称。从那里,它发布数据并将其输入数据库 我需要能够允许单引号(撇号),因为有些人的名字中有撇号,比如“O'Reilly” 有什么建议吗?单引号在任何方面都是不被禁止的。我将简单地假设您在将其插入数据库时出错。这可能是由于在输入值上省略了mysql\u real\u escape\u string() 如果您尝试INSERT。。。('O'Reilly')这是SQL转义函数的全部要点 (这就是为什么最初引

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

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

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


有什么建议吗?

单引号在任何方面都是不被禁止的。我将简单地假设您在将其插入数据库时出错。这可能是由于在输入值上省略了
mysql\u real\u escape\u string()

如果您尝试
INSERT。。。('O'Reilly')
这是SQL转义函数的全部要点

(这就是为什么最初引入了
magic_quotes
的原因:让SQL为新来者提供开箱即用的功能。-而不是让它特别安全。)

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

此外,您还需要对数据进行安全保护。以下是您应该拥有的:

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

如果我没有看错你的问题,那么你已经在你的程序中编写了一个bug,允许稍有恶意的人和病毒读写你的数据库。(假设有人键入
”;将表用户;
放到字段中……再见数据。)

对付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();
?>


您不必做任何事情来允许字符串中使用单引号。PHP不会自动删除单引号或任何其他字符。如果用户输入带有撇号的名称,则在
$\u POST
中仍会有撇号。那么,您需要帮助的实际问题是什么?@Dan Grossman评论+1。也许你想问的是,你将如何“正确”地将包含单引号的文本信息保存到数据库中?谁否决了我的帖子,谁就是傻瓜。我正在学习,对我来说,问一个基本的问题并不意味着这是一个愚蠢的问题。@Jairo:这就是我要问的;我不知道我必须如此具体。是的,我是通过艰苦的方式学会的哈哈。这就是为什么从那时起,我的问题非常详细和具体。感谢您的及时和信息性的答复。在我的PHP开发中,我从来没有真正处理过单引号,就像我在一旁做的那样(PHP-DEV)。我确实收到了MySQL错误,而不是PHP错误<代码>mysql\u real\u escape\u string()成功了!谢谢
           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."')