以下のようにPHPからMySQLへインサートしようとすると、テーブル上の値が文字化けしてしまう。
$dbh = new PDO('mysql:host=localhost;dbname=db1', $user, $pass); $sql = "insert into recipes(recipe_name, category, difficulty, budget, howto) values (?, ?, ?, ?, ?)"; $stmt = $dbh->prepare($sql); $stmt->bindValue(1, $recipe_name, PDO::PARAM_STR); $stmt->bindValue(2, $category, PDO::PARAM_INT); $stmt->bindValue(3, $difficulty, PDO::PARAM_INT); $stmt->bindValue(4, $budget, PDO::PARAM_INT); $stmt->bindValue(5, $howto, PDO::PARAM_STR); $stmt->execute();
いろいろ調べたら、$dbh->query("SET NAMES utf8");と設定がいるらしい。
そこで、以下のように書いたら文字化けが解消されました。
$dbh = new PDO('mysql:host=localhost;dbname=db1', $user, $pass); $sql = "insert into recipes(recipe_name, category, difficulty, budget, howto) values (?, ?, ?, ?, ?)"; $dbh->query("SET NAMES utf8"); $stmt = $dbh->prepare($sql); $stmt->bindValue(1, $recipe_name, PDO::PARAM_STR); $stmt->bindValue(2, $category, PDO::PARAM_INT); $stmt->bindValue(3, $difficulty, PDO::PARAM_INT); $stmt->bindValue(4, $budget, PDO::PARAM_INT); $stmt->bindValue(5, $howto, PDO::PARAM_STR); $stmt->execute();