@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クエリからデータベース別々に送信されます。従って、彼らは特別な扱いを必要とせず、あなたのキャラクターセットに許されるものをほとんど含んでいるかもしれません。
出典
2017-07-12 23:09:00
JBH
を見て、私はリンクの上に準備されたステートメントを使用してお勧めしたい –
@rtfm答えはエスケープ入力;-) – Qirel
準備された文を使用すると、特殊文字が正しくエスケープされ、SQLインジェクションを防ぐことができます(他の人に言及されているように) –