質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1151閲覧

DBに保存されているデータがPDOで更新できない。

teityann1225

総合スコア158

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/09/21 11:57

###やりたいこと
DBに保存されているデータをPDOを使って更新したい。

###エラー内容
接続は成功するが、更新ができない。
2種類チャレンジしてますが、どちらもダメです。
よろしくお願いします。

###コード

php

1 2 3$dsn = 'mysql:host= ;dbname= ;charset=utf8'; 4 $user = ''; 5 $password = ''; 6 7//エラーメッセージの初期化 8$errors = array(); 9 10$group_id="C5b4ae4d90a210e787f0"; 11$Name="4545"; 12 13 14 15 16 17//ここでデータベースに登録する 18try{ 19 20 $dbh = new PDO($dsn, $user, $password); 21 $statement = $dbh->prepare("update LineBot set Name =:Name where UesrId = :value"); 22 23 if($statement){ 24 25 //プレースホルダへ実際の値を設定する 26 $statement->bindParam(':Name', $Name, PDO::PARAM_STR); 27 $statement->bindValue(':value', $group_id, PDO::PARAM_STR); 28 $erros = "接続成功。"; 29echo $erros; 30 if(!$statement->execute()){ 31 $erros = "登録失敗しました。"; 32echo $erros; 33 } 34 35 //データベース接続切断 36 $dbh = null; 37 } 38 39 }catch (PDOException $e){ 40 print('Error:'.$e->getMessage()); 41 $erros = "データベース接続失敗しました。"; 42echo $erros; 43 } 44 45 46try{ 47 $dbh = new PDO($dsn, $user, $password); 48 49 print('<br>'); 50 51 if ($dbh == null){ 52 print('接続に失敗しました。<br>'); 53 }else{ 54 print('接続に成功しました。<br>'); 55 } 56 57 58 $sql = 'update LineBot set Name =? where UesrId = ?'; 59 $stmt = $dbh->prepare($sql); 60 $flag = $stmt->execute(array($Name, $group_id)); 61 62 if ($flag){ 63 print('データの更新に成功しました<br>'); 64 }else{ 65 print('データの更新に失敗しました<br>'); 66 } 67 68 print('更新後のデータ一覧:<br>'); 69 70 $sql = 'select id, name from shouhin'; 71 $stmt = $dbh->prepare($sql); 72 $stmt->execute(); 73print_r($dbh->errorInfo()); 74 75 76}catch (PDOException $e){ 77 die(); 78} 79 80?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

カラム名のtypoだと思います。UesrId ではなく UserId ですよね? 実際には裏でこんなエラーが発生しています。

Error:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'UesrId' in 'where clause'

エラーメッセージを確認できない状態だと今回のように何が起きているのか・間違ってるかなかなか気づけず、時間と精神を無駄に消費してしまいます。たとえばPDOであれば接続時の第4変数にオプションが渡せるのですが、ここでぜひエラーモードを ERRMODE_EXCEPTION に変更してみてください。

php

1$dsn = 'mysql:host=localhost;dbname=teratail;charset=utf8mb4'; 2$user = 'teratail'; 3$password = 'teratail'; 4$pdo_options = [ 5 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 6]; 7 8$dbh = new PDO($dsn, $user, $password, $pdo_options);

参考: PHP: エラーおよびエラー処理 - Manual

するとエラーが出た場合に例外(Exception)を投げてくれるようになるので、異常が起きたことにいち早く気づくことができるのでおすすめです。

ほかにもPHPでは、display_errrors や error_reporting などエラー出力に関する(煩わしい)設定が多くあります。開発時はなるべく全てのエラーを表示すると作業が捗ると思います。

投稿2017/09/21 12:24

編集2017/09/21 12:29
miyahan

総合スコア3095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityann1225

2017/09/21 13:27

ありがとうございました!
guest

0

オートコミットになっていないのでは?
明示的に
beginTransaction()
commit()
を付加して実行してみてはいかがでしょうか?

投稿2017/09/21 12:12

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityann1225

2017/09/21 12:32

具体的なコードを教えてもらってもいいでしょうか? よろしくお願いします。
teityann1225

2017/09/21 13:28

出来ました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問