###前提・実現したいこと
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を試したのですが同様のエラーが出ます。
同様のプログラムで項目数が少ないものは上手くいっているため、データベース側の問題なのでしょうか。
回答2件
あなたの回答
tips
プレビュー