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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

10936閲覧

データベースが更新できない

3.a.m.op

総合スコア11

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2018/03/08 03:32

編集2018/03/08 03:35

前提・実現したいこと

PHP+MySQLでクライアントの情報を管理するシステムを作っています。
UPDATE文で情報を更新する機能を作成しましたが、更新ができません。

発生している問題・エラーメッセージ

エラーメッセージは出ません。
if文で、更新に成功したら「更新完了」、失敗したら「更新できませんでした」が
表示されるようにしていますが、「更新完了」になりません。

該当のソースコード

PHP+MySQL

1if (isset($post['id'])){ 2 $id = $post['id']; 3} 4 5$name = $post['name']; 6$genre = $post['genre']; 7$url = $post['url']; 8. 9. 10. 11 12 13 14$pdo = new PDO('mysql:host=xxxxxx;dbname=xxxxxx;charset=utf8','user','password'); 15 16. 17. 18. 19 20if (isset($id)){ 21 $sql = $pdo->prepare('update client set name=?,genre=?,url=?..., where id=?'); 22 23 24 25 if ($sql->execute([$_REQUEST['name'], $_REQUEST['genre'], $_REQUEST['url'], ... $_REQUEST['id']])) 26 { 27 echo '<p>更新完了</p>'; 28 exit(); 29 } else { 30 echo '<p>更新できませんでした。もう一度やり直してください。</p>'; 31 exit(); 32 } 33} 34 35### 試したこと 36 37いろいろと調べてみましたが、初心者の為知識が乏しく、 38これといった打開策がみつけられません。 39phpmyadmin上でupdate文を実行してみましたが成功しました。 40よろしくお願いします。 41 42### 補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答2

0

ベストアンサー

可能性としては更新のために渡されたパラメータがおかしい、のだとは思いますが、確実に何が起こっているか知るために、errorInfo() を呼び出しましょう。

PHP

1$sql = $pdo->prepare('update client set name=?,genre=?,url=?..., where id=?'); 2 3if ($sql->execute([$_REQUEST['name'], $_REQUEST['genre'], $_REQUEST['url'], ... $_REQUEST['id']])) 4{ 5 echo '<p>更新完了</p>'; 6 exit(); 7} else { 8 print_r($sql->errorInfo()); 9 exit(); 10} 11

投稿2018/03/08 03:45

tacsheaven

総合スコア13703

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

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

3.a.m.op

2018/03/08 05:00

ご回答ありがとうございます。 自分で調べたときにerrorInfo()の使い方がよくわからなかったので助かりました。 実行したところ、 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'other='' where id='4'' at line 3 と出ました。 これは、where id=?の辺りに記述ミスがあるということになるのでしょうか?
yambejp

2018/03/08 05:02

otherの前にカンマがないとかその手の文法エラーたぐいでは?
3.a.m.op

2018/03/08 05:17

まさにその通りでした! otherの前にカンマがありませんでした! 初心者丸出しのケアレスミスでお恥ずかしい限りです。 初めての投稿で緊張しておりましたが、丁寧に教えていただき助かりました。 ありがとうございました。
guest

0

if (isset($post['id'])){

$postは$_POSTなのでしょうか?

PHP

1$id = filter_input(INPUT_POST,'id'); 2$name = filter_input(INPUT_POST,'name'); 3$genre = filter_input(INPUT_POST,'genre'); 4$url = filter_input(INPUT_POST,'url'); 5 6if(!is_null($id)){ 7 $sql='update client set name=?,genre=?,url=? where id=?'; 8 $stmt = $pdo->prepare($sql); 9 $stmt->execute([$name,$genre,$url,$id]); 10}

追記

念のためちゃんとかくと、pdoを使うときには必ずtry~catchでやるのが原則です

PHP

1 2try{ 3 $dsn = 'mysql:host=localhost; dbname=mydb;charset=utf8;'; 4 $user = 'myuser'; 5 $password = 'mypassword'; 6 $pdo = new PDO($dsn, $user,$password); 7 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 8 $pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8'); 9 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);//updateのときは意味ない 10 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 11 if(!is_null($id)){ 12 $sql='update client set name=?,genre=?,url=? where id=?'; 13 $data=[$name,$genre,$url,$id]; 14 $stmt = $pdo->prepare($sql); 15 $stmt->execute(); 16 $sql="SELECT * FROM tbl ORDER BY l"; 17 $stmt = $pdo->prepare($sql); 18 $stmt->execute($data); 19 } 20}catch(PDOException $e){ 21 die($e->getMessage()); 22}

投稿2018/03/08 04:09

編集2018/03/08 05:35
yambejp

総合スコア114843

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

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

3.a.m.op

2018/03/08 04:56

ご回答ありがとうございます。 はい、$_POSTになります。 上記の前に外部ファイルからのサニタイズをしており、 そこを変更し忘れてそのまま入力しておりました。 失礼しました。 filter_inputは初めて知りました。 調べて打開策に繋げられそうかやってみます。
退会済みユーザー

退会済みユーザー

2018/03/08 05:37

$pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8'); ???
yambejp

2018/03/08 05:40

$dsnに「charset=utf8」を指定する処理が効かないバージョンがあり それでもSET NAMEをコマンドとして発行したくないときのおまじないです。 安定バージョンでやる場合は不要でしょうね
退会済みユーザー

退会済みユーザー

2018/03/08 06:48

コピペミスかと思ってました^^; 下位フォローか。失礼。
3.a.m.op

2018/03/13 06:05

>te2ji様 ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問