
###前提・実現したいこと
PHPで入力した文字をmysqlに挿入したい為、
SQLインジェクション対策に mysqli_real_escape_string を使い
エスケープしようと考えています。
※サーバーはサクラのレンタルサーバーを使用します。
###発生している問題・エラーメッセージ
レンタルサーバーを使い操作したところ
どうやらmysqli_real_escape_stringが原因で文字化けして
挿入されてしまう。
しかし、XAMPP上では文字化けしない。。
勉強不足で申し訳ありませんが「文字化けを回避する方法」
をご教授の程お願いいたします。
###入力したい文字
例) 田中さん
###挿入される文字
例) \田中\さ\ん
###該当のソースコード
<?php print'<!DOCTYPE html>'; print'<html>'; print'<head>'; print'<Content-Type: text/html; charset=UTF-8>'; print'</head>'; print'<body>'; $name='田中さん'; $number='1'; $link = mysqli_connect('xxx.sakura.ne.jp', 'yyy', 'zzz'); $name =isset($name) ? mysqli_real_escape_string($link, $name) : ""; $dsn='mysql:dbname=yyy;host=xxx.sakura.ne.jp'; $user='yyy'; $password='zzz'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql="UPDATE database SET name=? WHERE number=?"; $stmt=$dbh->prepare($sql); $data[0]=$name; $stmt->execute($data); $dbh=null; $link = mysqli_connect('xxx.sakura.ne.jp', 'yyy', 'zzz'); $name =isset($name) ? mysqli_real_escape_string($link, $name) : ""; $dsn='mysql:dbname=yyy;host=xxx.sakura.ne.jp'; $user='yyy'; $password='zzz'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql="SELECT name FROM database WHERE number=?"; $stmt=$dbh->prepare($sql); $data2[0]=$number; $stmt->execute($data2); $dbh=null; $rec=$stmt->fetch(PDO::FETCH_ASSOC); $name_in=htmlspecialchars($rec['name']); print$name_in; print'</body>'; print'</html>'; ?>


回答3件
あなたの回答
tips
プレビュー