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

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

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

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

PHP

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

Q&A

解決済

2回答

1188閲覧

データベースの変更ページ作成していますが、エラーメッセージが流れます。

rozeo

総合スコア14

MySQL

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

PHP

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

0グッド

0クリップ

投稿2017/08/25 04:54

編集2017/08/25 05:20

###前提・実現したいこと
PHPでデータベースのフィールドをブラウザから編集するページを作っています。
更新ボタンを押すと以下のメッセージが流れてしまいます。

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

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE (cd_no = '$cd_no')' at line 23' in C:\pleiades\xampp\htdocs\◆\update.php:185 Stack trace: #0 C:\pleiades\xampp\htdocs\◆\update.php(185): PDOStatement->execute(Array) #1 {main} thrown in C:\pleiades\xampp\htdocs\◆\update.php on line 185

###該当のソースコード

<?php header("Content-type: text/html; charset=utf-8"); define('DB_DATABASE', '◆'); define('DB_USERNAME', '◆'); define('DB_PASSWORD', '◆'); define('PDO_DSN', 'mysql:dbhost=◆;dbname=' . DB_DATABASE); // get parameters. if($_SERVER["REQUEST_METHOD"] != "POST"){ // ブラウザからHTMLページを要求された場合 $cd_no= $_GET["cd_no"]; $date_new = $_GET["date_new"]; // 登録日 $date_up = $_GET["date_up"]; // 更新日 $db_server_name = $_GET["db_server_name"]; // データベースサーバー $db_name = $_GET["db_name"]; // データベース名 $db_user = $_GET["db_user"]; // データベースユーザー $db_password = $_GET["db_password"]; // データベースパスワード $dealer_name = $_GET["dealer_name"]; // ディーラー名 $dealer_name_kana = $_GET["dealer_name_kana"]; // ディーラー名カナ $postal_code = $_GET["postal_code"]; // 郵便番号 $prefecture = $_GET["prefecture"]; // 都道府県 $city = $_GET["city"]; // 市区町村 $address1 = $_GET["address1"]; // 住所1 $address2 = $_GET["address2"]; // 住所2 $tel = $_GET["tel"]; // 電話 $fax = $_GET["fax"]; // ファックス $url = $_GET["url"]; // URL $president = $_GET["president"]; // 代表者 $delete_flag = $_GET["delete_flag"]; // 削除フラグ $dealer_id = $_GET["dealer_id"]; // ディーラーID $dealer_password = $_GET["dealer_password"]; // dealer_password $connection_name = $_GET["connection_name"]; // connection_name }else{ // フォームからPOSTによって要求された場合 $cd_no= $_POST["cd_no"]; $date_new = $_POST["date_new"]; // 登録日 $date_up = $_POST["date_up"]; // 更新日 $db_server_name = $_POST["db_server_name"]; // データベースサーバー $db_name = $_POST["db_name"]; // データベース名 $db_user = $_POST["db_user"]; // データベースユーザー $db_password = $_POST["db_password"]; // データベースパスワード $dealer_name = $_POST["dealer_name"]; // ディーラー名 $dealer_name_kana = $_POST["dealer_name_kana"]; // ディーラー名カナ $postal_code = $_POST["postal_code"]; // 郵便番号 $prefecture = $_POST["prefecture"]; // 都道府県 $city = $_POST["city"]; // 市区町村 $address1 = $_POST["address1"]; // 住所1 $address2 = $_POST["address2"]; // 住所2 $tel = $_POST["tel"]; // 電話 $fax = $_POST["fax"]; // ファックス $url = $_POST["url"]; // URL $president = $_POST["president"]; // 代表者 $delete_flag = $_POST["delete_flag"]; // 削除フラグ $dealer_id = $_POST["dealer_id"]; // ディーラーID $dealer_password = $_POST["dealer_password"]; // dealer_password $connection_name = $_POST["connection_name"]; // connection_name $sub1 = $_POST["sub1"]; try{ $db = new PDO(PDO_DSN, DB_USERNAME,DB_PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e){ echo $e->getMessage(); exit; } //データを変更する // UPDATE文を変数に格納 $sql = "UPDATE mdealers SET date_new = :date_new, date_up = :date_up, db_server_name = :db_server_name, db_name = :db_name, db_user = :db_user, db_password = :db_password, dealer_name = :dealer_name, dealer_name_kana = :dealer_name_kana, postal_code = :postal_code, prefecture = :prefecture, city = :city, address1 = :address1, address2 = :address2, tel = :tel, fax = :fax, url = :url, president = :president, delete_flag = :delete_flag, dealer_id = :dealer_id, dealer_password = :dealer_password, connection_name = :connection_name, WHERE (cd_no = :cd_no);"; // 更新する値と該当のIDは空のまま、SQL実行の準備をする $stmt = $db->prepare($sql); // 更新する値と該当のIDを配列に格納する $params = array( ':date_new' => '$date_new', ':date_up' => '$date_up', ':db_server_name' => '$db_server_name', ':db_name' => '$db_name', ':db_user' => '$db_user', ':db_password' => '$db_password', ':dealer_name' => '$dealer_name', ':dealer_name_kana' => '$dealer_name_kana', ':postal_code' => '$postal_code', ':prefecture' => '$prefecture', ':city' => '$city', ':address1' => '$address1', ':address2' => '$address2', ':tel' => '$tel', ':fax' => '$fax', ':url' => '$url', ':president' => '$president', ':delete_flag' => '$delete_flag', ':dealer_id' => '$dealer_id', ':dealer_password' => '$dealer_password', ':connection_name' => '$connection_name', ':cd_no' => '$cd_no' ); //var_dump( $params ); // 更新する値と該当のIDが入った変数をexecuteにセットしてSQLを実行 $stmt->execute($params); //var_dump( $stmt ); // クリックでリンクに飛ぶ $list = 'http://localhost/◆/list.php'; header("Location: {$list}"); } //var_dump( $cd_no ); echo "<!DOCTYPE html>"; echo "<html>"; echo "<head>"; echo "<body>"; echo $cd_no. ':' . $date_new . ':' . $date_up . ':' . $db_server_name . ':' . $db_name . ':' . $db_user . ':' . $db_password . ':' . $dealer_name . ':' . $dealer_name_kana . ':' . $postal_code . ':' . $prefecture . ':' . $city . ':' . $address1 . ':' . $address2 . ':' . $tel . ':' . $fax . ':' . $url . ':' . $president . ':' . $delete_flag . ':' . $dealer_id . ':' . $dealer_password . ':' . $connection_name. '<br>'; //echo $sub1 . '<br>'; echo "<form method=\"POST\" action=\"".$_SERVER["PHP_SELF"]."\">"; echo "<tr>"; echo "<input type=\"hidden\" value=\"".$cd_no."\" name=\"cd_no\">"; echo "<td><input type=\"text\" name=\"date_new\" value=\"".$date_new."\"></td>"; echo "<td><input type=\"text\" name=\"date_up\" value=\"".$date_up."\"></td>"; echo "<td><input type=\"text\" name=\"db_server_name\" value=\"".$db_server_name."\"></td>"; echo "<td><input type=\"text\" name=\"db_name\" value=\"".$db_name."\"></td>"; echo "<td><input type=\"text\" name=\"db_user\" value=\"".$db_user."\"></td>"; echo "<td><input type=\"text\" name=\"db_password\" value=\"".$db_password."\"></td>"; echo "<td><input type=\"text\" name=\"dealer_name\" value=\"".$dealer_name."\"></td>"; echo "<td><input type=\"text\" name=\"dealer_name_kana\" value=\"".$dealer_name_kana."\"></td>"; echo "<td><input type=\"text\" name=\"postal_code\" value=\"".$postal_code."\"></td>"; echo "<td><input type=\"text\" name=\"prefecture\" value=\"".$prefecture."\"></td>"; echo "<td><input type=\"text\" name=\"city\" value=\"".$city."\"></td>"; echo "<td><input type=\"text\" name=\"address1\" value=\"".$address1."\"></td>"; echo "<td><input type=\"text\" name=\"address2\" value=\"".$address2."\"></td>"; echo "<td><input type=\"text\" name=\"tel\" value=\"".$tel."\"></td>"; echo "<td><input type=\"text\" name=\"fax\" value=\"".$fax."\"></td>"; echo "<td><input type=\"text\" name=\"url\" value=\"".$url."\"></td>"; echo "<td><input type=\"text\" name=\"president\" value=\"".$president."\"></td>"; echo "<td><input type=\"text\" name=\"delete_flag\" value=\"".$delete_flag."\"></td>"; echo "<td><input type=\"text\" name=\"dealer_id\" value=\"".$dealer_id."\"></td>"; echo "<td><input type=\"text\" name=\"dealer_password\" value=\"".$dealer_password."\"></td>"; echo "<td><input type=\"text\" name=\"connection_name\" value=\"".$connection_name."\"></td>"; echo "<td><input type=\"submit\" value=\"変更\" name=\"sub1\"></td>"; echo "</tr>"; echo "</form>"; echo "</body>"; echo "</html>";

###試したこと
bindParam、bindValueを試したのですが同様のエラーが出ます。
同様のプログラムで項目数が少ないものは上手くいっているため、データベース側の問題なのでしょうか。

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

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

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

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

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

m.ts10806

2017/08/25 04:59

プログラムコード(およびエラーメッセージ)は```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)
m.ts10806

2017/08/25 05:00

line 185はどこでしょうか?ご提示いただいたソースは180行までしかないようですが。
rozeo

2017/08/25 05:18

後程必要箇所は修正いたします。ご指摘ありがとうございます。
guest

回答2

0

単純に

':cd_no' => '$cd_no'

ここでシングルクォートでくくっているので$cd_noが展開されていない

':cd_no' => $cd_no
としてください
同様の記述がいくつかあるのでおしなべて同じ対応をしてください

投稿2017/08/25 05:07

yambejp

総合スコア114839

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

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

rozeo

2017/08/25 05:15

ありがとうございます。別回答とあわせて、非常に参考になりました。
guest

0

ベストアンサー

ぱっとみ

PHP

1':date_new' => '$date_new', 2':date_up' => '$date_up', 3':db_server_name' => '$db_server_name', 4':db_name' => '$db_name', 5':db_user' => '$db_user', 6':db_password' => '$db_password', 7':dealer_name' => '$dealer_name', 8':dealer_name_kana' => '$dealer_name_kana', 9':postal_code' => '$postal_code', 10':prefecture' => '$prefecture', 11':city' => '$city', 12':address1' => '$address1', 13':address2' => '$address2', 14':tel' => '$tel', 15':fax' => '$fax', 16':url' => '$url', 17':president' => '$president', 18':delete_flag' => '$delete_flag', 19':dealer_id' => '$dealer_id', 20':dealer_password' => '$dealer_password', 21':connection_name' => '$connection_name', 22':cd_no' => '$cd_no'

の値側に関して変数名を''で囲う必要がなさそう

あとSQL文に於いての

PHP

1connection_name = :connection_name, // <- この,でSQL文法エラーになりそう 2WHERE (cd_no = :cd_no);";

投稿2017/08/25 05:01

rururu3

総合スコア5545

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

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

rozeo

2017/08/25 05:07

connection_name = :connection_name, // <- この,でSQL文法エラーになりそう WHERE (cd_no = :cd_no);"; まさしくこの通りでした。どうもありがとうございます。
rururu3

2017/08/25 05:12 編集

別解答および私の解答にも書いてますが、 変数をシングルコーテーションで囲ってるのも対応しないと '$cd_no' はそのまま$cd_noっていう文字列を表しますのでご注意を
rozeo

2017/08/25 05:14

ありがとうございます。合わせて対応しましたところ、無事に出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問