転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【WEBサービス開発】PHPからMySQLへ値を渡すと文字化けする

以下のように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();