2017-07-05 33 views
0

有时,当你有这些时,它会很糟糕;”'(分号,单引号和双引号)字符串中的所有内容。PHP + Mysql:如何插入具有“'(分号,单+双引号)的数据

问题很简单,最简单的方式发送那些刺入数据库。

base64_encode(); 
base64_decode(); 
// Is not an option. I need to keep those data just same as it is. 
+1

使用类似PDO和绑定变量。 –

+1

在插入数据库之前使用转义字符串... – Naga

+0

您可以使用'addslashes()'来处理插入数据库的单引号和双引号。 –

回答

1

PDO statements是你与具有单/双引号值执行SQL查询到数据库的问题,最好的解决办法......但更重要的是 PDO报表帮助防止SQL注入

为了向您展示这是如何工作的,这个非常简单的示例为您提供了PDO语句如何工作的基本知识。所有这些例子都是建立到数据库的连接,并将用户名,电子邮件和密码插入到用户表中。

<?php 
// START ESTABLISHING CONNECTION... 
$dsn = 'mysql:host=host_name_here;dbname=db_name_here'; 
//DB username 
$uname = 'username_here'; 
//DB password 
$pass = 'password_here'; 

try 
    { 

    $db = new PDO($dsn, $uname, $pass); 

    $db->setAttribute(PDO::ERRMODE_SILENT, PDO::ATTR_EMULATE_PREPARES); 
    error_reporting(0); 
    } catch (PDOException $ex) 
    { 
    echo "Database error:" . $ex->getMessage(); 
    } 

// END ESTABLISHING CONNECTION - CONNECTION IS MADE. 


$username = $_POST['username']; 
$email = $_POST['email']; 
$password = $_POST['password']; 
$hashed_password = password_hash($password, DEFAULT_BCRYPT); 

//Validation on inputs here... 

// Your SQL query... here is a sample one. 
$query = "INSERT INTO users (userName, email, password) VALUES (:userName, :email, :password)"; 

$statement = $db->prepare($query); 
// The values you wish to put in. 
$statementInputs = array("userName" => $username, "email" => $email, "password" => $hashed_password); 

$statement->execute($statementInputs); 
$statement->closeCursor(); 
?> 

你可以把建立连接部分在一个单独的文件和require_once该文件,以避免写相同的代码,一遍又一遍,以建立与数据库的连接。

2

你需要

addslashes('your text') // in your php page 
1

使用mysqli_real_escape_string

$someText = mysqli_real_escape_string($con,"It's a test."); 

其中$ con是你的数据库连接变量。