初学者です。ご教授をお願い致します。
XAMPPでMySQLとApacheを使用しています。
できないこと
1つのデーベース内に、4つのテーブルを作っているのですが
1つのテーブルでのみ、文字化けしてレコードが挿入されてしまいます。
きちんとしたものを挿入できるようにしたいです。
ちなみにですが、会員登録をしようとしているところです。
コマンドでINSERT文で挿入すると文字化けしませんでした。
具体的には、
(name)tetejiro
'tetejiroa'
(year)1
'1'
(pass)aaa
'47bce5c74f589f4867dbd57e9ca9f808'
※暗号化した上で保存するようにしています。
(mail)aaa@gmail.com
'aaa@gmail.com'
このようにレコードが挿入されます。
※漢字部分はそのままでした。(name)質問 ⇒ '質問'
試したこと
DBへ接続する際は、このように記載しています。
$dsn='mysql:host=localhost;dbname=portfolio;charset=utf8mb4_general_ci';
※最初は、一番最後の文字コードをutf8でしていたのですが、
照合順序がutf8mb4_general_ciとなっていたため、上記へ変更してみましたが、だめでした。
コード
php
1 <form action="reg-done.php" method="post"> 2 <p><input type="hidden" name="name" value="'<?php print $name; ?>'"></p> 3 <p><input type="hidden" name="year" value="'<?php print $year; ?>'"></p> 4 <p><input type="hidden" name="pass" value="'<?php print $pass; ?>'"></p> 5 <p><input type="hidden" name="mail" value="'<?php print $mail; ?>'"></p> 6 <p><input type="submit" value="始める"> 7 </form>
php
1 try 2 { 3 require_once '../hensu.php'; 4 $post=sanitize($_POST); 5 $name=$post['name']; 6 $year=$post['year']; 7 $pass=$post['pass']; 8 $mail=$post['mail']; 9 10 require_once '../db.php'; 11 //$dsn='mysql:host=mysql~省略します~ ;charset=utf8';が含まれています。 12 13 $dbh=new PDO($dsn,$user,$password); 14 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 15 16 $sql='LOCK TABLES member READ'; 17 $sql='INSERT INTO member(name,year,pass,mail) VALUES (?,?,?,?)'; 18 $stmt=$dbh->prepare($sql); 19 $data=array(); 20 $data[]=$name; 21 $data[]=$year; 22 $data[]=$pass; 23 $data[]=$mail; 24 $stmt->execute($data); 25 26 $sql='SELECT LAST_INSERT_ID()'; 27 $stmt=$dbh->prepare($sql); 28 $stmt->execute(); 29 $rec=$stmt->fetch(PDO::FETCH_ASSOC); 30 $code=$rec['LAST_INSERT_ID()']; 31 $sql='UNLOCK TABLES'; 32 33 header('Location:../mypage/mypage.php?code='.$code); 34 } 35 catch (\Exception $e) 36 { 37 var_dump($e); 38 print 'ただいま障害によりご迷惑をおかけしております。'; 39 print '<form action="registration.html" method="post">'; 40 print '<input type="submit" value="戻る">'; 41 print '</form>'; 42 exit(); 43 } 44
MySQL
1-- 2-- テーブルの構造 `member` 3-- 4 5CREATE TABLE IF NOT EXISTS `member` ( 6 `code` int(11) NOT NULL AUTO_INCREMENT, 7 `name` varchar(100) NOT NULL, 8 `year` varchar(100) NOT NULL, 9 `pass` varchar(100) NOT NULL, 10 `mail` varchar(100) NOT NULL, 11 PRIMARY KEY (`code`) 12) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; 13 14-- 15-- テーブルのデータのダンプ `member` 16-- 17 18INSERT INTO `member` (`code`, `name`, `year`, `pass`, `mail`) VALUES 19(1, ''tetemalu'', ''1'', ''47bce5c74f589f4867dbd57e9ca9f808'', ''hy1733505@gmail.com''), 20(2, ''tetemalu'', ''1'', ''47bce5c74f589f4867dbd57e9ca9f808'', ''aaa@gmail.com''); 21
回答2件
あなたの回答
tips
プレビュー