Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
带引号和双引号的Mysql PHP插入_Php_Mysql - Fatal编程技术网

带引号和双引号的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(“”,“”)并且它也可以工作。