';\r\n           }\r\n```","answerCount":3,"upvoteCount":0,"datePublished":"2018-08-03T13:14:39.736Z","dateModified":"2018-08-05T12:49:56.415Z","acceptedAnswer":{"@type":"Answer","text":"データの登録にmysqliを使用しているとのことなので、\r\nよくありがちなパターンとして、\r\nプログラムの冒頭でデータベースへの接続とトランザクション開始をやっておいて、\r\nアクションが登録なのか更新なのかで処理を分岐して\r\nINSERT INTO文実行と\r\nUPDATE文実行で\r\nそれぞれ冒頭で接続したのを利用して行い、\r\n分岐終了時にcommitするという流れになります。\r\n\r\nプログラムの中で、pdo接続とmysqli接続を混在させてしまうと、\r\nのちのちわけがわからなくなってしまいます。\r\nデータベースへの接続方法はどちらでも構わないので統一しておくべきです。\r\n\r\n接続:\r\nmysqli_connect\r\n更新用クエリーの準備:\r\nmysqli_prepare\r\n変数をクエリーにバインド:\r\nmysqli_stmt_bind_param\r\nクエリーを実行:\r\nmysqli_stmt_execute\r\n更新を反映させる:\r\nmysqli_commit","dateModified":"2018-08-03T14:02:17.423Z","datePublished":"2018-08-03T13:51:59.492Z","upvoteCount":1,"url":"https://teratail.com/questions/139483#reply-211013"},"suggestedAnswer":[{"@type":"Answer","text":"[mysql_*が非推奨になり、その後廃止された理由とは?](https://teratail.com/questions/59503) を熟読されては?\r\n\r\nバージョンに依存する内容かわからなくても、PHPやMySQLのバージョンは最初から質問に明記した方が良いです。","dateModified":"2018-08-03T22:12:47.493Z","datePublished":"2018-08-03T22:12:47.493Z","upvoteCount":0,"url":"https://teratail.com/questions/139483#reply-211072","comment":[]},{"@type":"Answer","text":"PHPからMySQLを扱う場合、PDO以外にmysqliという選択肢もあります。\r\n\r\n[どの API を使うか(PHPマニュアル)](http://php.net/manual/ja/mysqlinfo.api.choosing.php)","dateModified":"2018-08-03T13:20:51.617Z","datePublished":"2018-08-03T13:20:51.617Z","upvoteCount":0,"url":"https://teratail.com/questions/139483#reply-211005","comment":[{"@type":"Comment","text":"テキストファイルなどでデータ管理している可能性が微レ存","datePublished":"2018-08-03T13:23:56.268Z","dateModified":"2018-08-03T13:23:56.268Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/MySQL","name":"MySQLに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/139483","name":"PHP UPDATE文について"}}]}}}
PHPで掲示板を作っています。mysqliを使って入力されたデータに書き換える(投稿内容編集機能)処理を行っています。しかし、自分なりに考えてやってみましたがエラーが出てしまいます。mysqliを使っての正しいUPDATE文の使い方を教えていただければ幸いです。
PHP
1    if ((!empty($_POST['name']) && !empty($_POST['muscle_level'])) && (!empty($_POST['muscle_genre']) && !empty($_POST['messages']))) { //投稿欄が記入されている場合
2               //XSSの対策
3              $bbd_id2 = $mysqli->real_escape_string($_POST["bbd_id2"]);
4              $name = $mysqli->real_escape_string($_POST['name']);
5              $muscle_level = $mysqli->real_escape_string($_POST['muscle_level']);
6              $muscle_genre = $mysqli->real_escape_string($_POST['muscle_genre']);
7              $messages = $mysqli->real_escape_string($_POST['messages']);
8              $change_pass = $mysqli->real_escape_string($_POST['change_pass']);
9              //changeでデータベースのデータを鼓往診
10              $change = $mysqli->query("UPDATE `message` SET (`name` = '{$name}' , `muscle_level` = '{$muscle_level}' , `muscle_genre` = '{$muscle_genre}' ,
11                                                              `messages` = '{$messages}' WHERE `bbd_id` = '{$bbd_id2}')");
12              if (!$change) { // change文におけるエラー処理
13                printf("%s\n", $mysqli->error);
14                exit();
15              }
16              echo '<script> alert("登録が完了しました。"); location.href="muscle_bbd.php"; </script>';
17           }
 ベストアンサー
ベストアンサー
データの登録にmysqliを使用しているとのことなので、
よくありがちなパターンとして、
プログラムの冒頭でデータベースへの接続とトランザクション開始をやっておいて、
アクションが登録なのか更新なのかで処理を分岐して
INSERT INTO文実行と
UPDATE文実行で
それぞれ冒頭で接続したのを利用して行い、
分岐終了時にcommitするという流れになります。
プログラムの中で、pdo接続とmysqli接続を混在させてしまうと、
のちのちわけがわからなくなってしまいます。
データベースへの接続方法はどちらでも構わないので統一しておくべきです。
接続:
mysqli_connect
更新用クエリーの準備:
mysqli_prepare
変数をクエリーにバインド:
mysqli_stmt_bind_param
クエリーを実行:
mysqli_stmt_execute
更新を反映させる:
mysqli_commit
15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

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

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