带引号和双引号的Mysql PHP插入
我试图将数据插入一个包含引号和双引号的表中。我怎样才能逃脱他们 我要添加的值是:带引号和双引号的Mysql PHP插入,php,mysql,Php,Mysql,我试图将数据插入一个包含引号和双引号的表中。我怎样才能逃脱他们 我要添加的值是: default=1,name='Bob',lastName="Jones" $ins = "INSERT into table (field1,field2,fiel3,) values ('data1','data2',????)"; 如果我使用单引号,Bob部分就会被破坏。如果我使用双引号,琼斯部分就会被打破 如果我使用mysql\u escape\u字符串,这会是什么样子 $data3 = mysq
default=1,name='Bob',lastName="Jones"
$ins = "INSERT into table (field1,field2,fiel3,) values ('data1','data2',????)";
如果我使用单引号,Bob部分就会被破坏。如果我使用双引号,琼斯部分就会被打破
如果我使用mysql\u escape\u字符串,这会是什么样子
$data3 = mysql_escape_string(????);
同样,如果我使用单引号,Bob部分会被破坏。如果我使用双引号,琼斯部分就会被打破
我知道这是一个糟糕的db设计,但我无法控制需要添加的字段或值的语法。我必须完全按照上面所示插入值。使用准备好的语句 看看这个 首先连接改进的
mysqli
$mysqli = new mysqli($servername, $username, $password);
$stmt = $mysqli->prepare("INSERT into table (field1,field2,fiel3,) values (?,?,?)");
$stmt->bind_param("sss",$data1,$data2,$data3);
$stmt->execute();
其中,$mysqli
是您的连接器
通过这种方式,您还防止了SQL注入。使用准备好的语句 看看这个 首先连接改进的
mysqli
$mysqli = new mysqli($servername, $username, $password);
$stmt = $mysqli->prepare("INSERT into table (field1,field2,fiel3,) values (?,?,?)");
$stmt->bind_param("sss",$data1,$data2,$data3);
$stmt->execute();
其中,$mysqli
是您的连接器
通过这种方式,您还防止了SQL注入。从我读到的
mysql.*
函数在PHP7中被弃用,据我所知,您无法转义引号。至少不合适。我建议您使用PDO,因为它与不同的数据库类型兼容,而且我认为它比mysqli.*
函数更易于使用。尽管我会告诉您,mysqli
能够转义引号
由于已经有一个mysqli示例的答案,下面是一个使用PDO转义引号的简短示例:
$dns = "mysql:dbname=test;host=localhost";
$user = "root";
$password = "";
$connection = new PDO($dns, $user, $password);
$sql = "INSERT INTO users (username, password) VALUES (:username, :password)";
$statement = $connection->prepare($sql);
$statement->execute([
':username' => $username,
':password' => $password
]);
现在请记住,这只是转义引号,它不会过滤您的输入。因此,在插入任何外来数据(表单数据)之前,请根据要筛选的内容使用filter\u var()
函数,例如:$string=filter\u var($string,filter\u SANITIZE\u string)
。或者你可以:
$statement->bindParam(':username', $username, PDO_PARAM_STRING);
从我所读到的
mysql.*
函数在PHP7中被弃用,从我所了解的情况来看,你不能回避引号。至少不合适。我建议您使用PDO,因为它与不同的数据库类型兼容,而且我认为它比mysqli.*
函数更易于使用。尽管我会告诉您,mysqli
能够转义引号
由于已经有一个mysqli示例的答案,下面是一个使用PDO转义引号的简短示例:
$dns = "mysql:dbname=test;host=localhost";
$user = "root";
$password = "";
$connection = new PDO($dns, $user, $password);
$sql = "INSERT INTO users (username, password) VALUES (:username, :password)";
$statement = $connection->prepare($sql);
$statement->execute([
':username' => $username,
':password' => $password
]);
现在请记住,这只是转义引号,它不会过滤您的输入。因此,在插入任何外来数据(表单数据)之前,请根据要筛选的内容使用filter\u var()
函数,例如:$string=filter\u var($string,filter\u SANITIZE\u string)
。或者你可以:
$statement->bindParam(':username', $username, PDO_PARAM_STRING);
只是一个模仿原始mysql\u real\u escape\u字符串的小函数,但不需要活动的mysql连接。可以在数据库类中作为静态函数实现。希望它能帮助别人
<?php
function mysql_escape_mimic($inp) {
if(is_array($inp))
return array_map(__METHOD__, $inp);
if(!empty($inp) && is_string($inp)) {
return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);
}
return $inp;
}
?>
来源:只是一个模仿原始mysql\u real\u escape\u字符串的小函数,但不需要活动的mysql连接。可以在数据库类中作为静态函数实现。希望它能帮助别人
<?php
function mysql_escape_mimic($inp) {
if(is_array($inp))
return array_map(__METHOD__, $inp);
if(!empty($inp) && is_string($inp)) {
return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);
}
return $inp;
}
?>
来源:我只是好奇你为什么要这么做。警告:如果你只是在学习PHP,请不要学习过时的界面。这很糟糕,已经在PHP7中删除了。替换类和指南类有助于解释最佳实践。确保你的用户参数是正确的,否则你会有严重的后果。幸运的是,世界已经从这个API开始了。你可以避开双引号,这是一种方法,或者使用一个准备好的语句。这是PDO的想法,这当然不是一个坏主意。阿里用一个类似的
mysqli
解决方案回答,这也是解决问题的方法。我倾向于PDO而不是mysqli,它更通用,不仅仅是MySQL,而且有更好的绑定选项。命名的占位符是一件大事。我只是好奇你为什么要这么做。警告:如果你只是在学习PHP,请不要学习过时的接口。这很糟糕,已经在PHP7中删除了。替换类和指南类有助于解释最佳实践。确保你的用户参数是正确的,否则你会有严重的后果。幸运的是,世界已经从这个API开始了。你可以避开双引号,这是一种方法,或者使用一个准备好的语句。这是PDO的想法,这当然不是一个坏主意。阿里用一个类似的mysqli
解决方案回答,这也是解决问题的方法。我倾向于PDO而不是mysqli,它更通用,不仅仅是MySQL,而且有更好的绑定选项。命名的占位符是一个大问题。很好的例子,就是如何使用mysqli
。现在,他有了整个解决方案。我知道如何使用准备好的占位符。我的问题是。如果sss真的是Bob的古怪“房子”怎么办?你要么这样做“Bob的古怪“房子”
,要么“Bruce Wayne是“蝙蝠侠”
,这就行了。试试看,享受mysqliYou的强大功能。你忘了在连接字符串中添加数据库。很好的例子,就是如何使用mysqli
。现在,他有了完整的解决方案。我知道如何使用准备好的语句。我的问题是。如果sss真的是Bob的古怪“房子”怎么办?你要么这样做“Bob的古怪“房子”
,要么“Bruce Wayne是“蝙蝠侠”
,这就行了。试试看,享受mysqliYou的强大功能吧!你忘了在连接字符串中添加数据库。太棒了。前面我使用了str_replace(“”,“”)代码>而且它也可以工作。太棒了。前面我使用了str_replace(“”,“”)代码>并且它也可以工作。