2017-07-12 13 views
0

MySQLで 'を含む特殊文字を許可する必要があります。私はユーザーデータを許可する "バイオ"テキストフィールドを持っており、私はPOSTメソッドを使用しています。 私のPHPが含まれています:は、MySQLの特殊文字を許可します

$uid = $_POST["UID"]; 
    $bio = $_POST["bio"]; 

    $update_query = "UPDATE `User` SET bio = '$bio' WHERE uid = '$uid';"; 
    $conn->query($update_query); 
    $conn->close() 

すべてのユーザーが確認されているので、それらは特殊文字を使用できるようにすることで危険はあり得ません。コードを更新するにはどうしたらいいですか?

+3

を見て、私はリンクの上に準備されたステートメントを使用してお勧めしたい –

+1

@rtfm答えはエスケープ入力;-) – Qirel

+0

準備された文を使用すると、特殊文字が正しくエスケープされ、SQLインジェクションを防ぐことができます(他の人に言及されているように) –

答えて

1

mysqli_real_escape_string()機能を使用して文字列をエスケープできます。ここにいくつかはDocumentationです。基本的には、接続と文字列を渡し、データベースに入力するための安全な文字列を返します。あなたのケースでは

あなたはこのような何かをするだろう:

$uid = mysqli_real_escape_string($conn, $_POST["UID"]); 
$bio = mysqli_real_escape_string($conn, $_POST["bio"]); 

PSは:あなたは、常にPHPでmysqliのを使用する必要があり、準備された文への

+0

ありがとう、私はついにそれを手に入れました – Sudacris

+0

良いアプローチ準備されたstを使用することですクエリ内にプレースホルダを持つatements。これは常にエスケープするよりも優れています。あなたはまた、mysqli(OPが使用しているように)を常に使用すべきだと言っていますが、(準備してバインドすれば!)使えてうれしいですが、pdoはmysqliと同じくらい有効です。それらの間に必ずしも間違いがあるとは限りません。 – Qirel

1

@Alex Tartanは絶対に正しいです、あなたは準備文を使用する必要があります。彼らはこの問題を完全に解決するだけでなく、悪意のあるユーザーからあなたを守るための道を歩んでいます。ここに例を示します。これはとても価値がある

$host = 'localhost'; 
$db = 'my_database'; 
$user = 'my_username'; 
$pass = 'my_password'; 
$charset = 'utf8'; 
$dsn = "mysql:host=$host;dbname=$db;charset=$charset"; 
$opt = [ 
    PDO::ATTR_ERRMODE    => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
    PDO::ATTR_EMULATE_PREPARES  => false 
]; 
$pdo = new PDO($dsn, $user, $pass, $opt); 

$stmt=$pdo->prepare("UPDATE `User` SET bio = :bio WHERE uid = :uid"); 
$stmt->bindParam('bio', $_POST['bio']); 
$stmt->bindParam('uid', $_POST['UID']); 
$stmt->execute(); 

理由は、変数の値(例えば、$_POST['bio']の内容が)SQLクエリからデータベース別々に送信されます。従って、彼らは特別な扱いを必要とせず、あなたのキャラクターセットに許されるものをほとんど含んでいるかもしれません。

関連する問題