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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MySQL

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

PHP

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

Q&A

1回答

3521閲覧

SQLSTATE[42000]: Syntax error or access violation: 1064 のエラーの解決方法を教えていただきたいです。

tekuteku0987

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MySQL

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

PHP

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

0グッド

1クリップ

投稿2022/08/13 14:37

今起きている問題

phpを使ってシフトの管理システムを作っています。その途中で、

SQLSTATE[42000]: Syntax error or access violation: 1064You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''2022/09/10, 2022/09/15, 2022/09/21)' at line 2

というエラーに直面しました。これを解決したいです。

該当のソースコード

html

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>cooking_staff_form</title> 8 <link rel="stylesheet" href="../css/main.css"> 9 <meta charset="utf-8"> 10 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> 11 <!--jQuery UI JS--> 12 <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 13 <!--jquery UI japanese--> 14 <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/i18n/jquery.ui.datepicker-ja.min.js"></script> 15 <!--jQuery UI CSS--> 16 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.min.css"> 17 <!--jQuery UI multi--> 18 <script src="https://cdn.rawgit.com/dubrox/Multiple-Dates-Picker-for-jQuery-UI/master/jquery-ui.multidatespicker.js"></script> 19 <script type = "text/javascript"> 20 $(function() { 21 $('#data_picker').multiDatesPicker({ 22 numberOfMonths: [2,1], 23 maxPicks: 31, 24 }); 25 }); 26 </script> 27</head> 28<body> 29 <section class = "cooking_staff_form wrapper"> 30 <form action="http://localhost:3000/shift_management_calender\php\send_staffinfo.php" method="post"> 31 <div class = "cooking_staff_info"> 32 <dl> 33 <div class = "input_name"> 34 <h2 class = "sec_title"><p>名前を入力してください</p></h2> 35 <dd> 36 <input type="text" name = "staff_name"> 37 </dd> 38 </div> 39 <div class = "cuisine_table"> 40 <div class = "content_box"> 41 <h2 class = "sec_title"><p>あなたができる料理名を選択してください</p></h2> 42 <div class = "flex"> 43 <div> 44 <dd><input type = "checkbox" name="cuisine[]" value = "オムライス">オムライス</input></dd> 45 <dd><input type = "checkbox" name="cuisine[]" value = "明太子パスタ">明太子パスタ</input></dd> 46 <dd><input type = "checkbox" name="cuisine[]" value = "たこ焼き">たこ焼き</input></dd> 47 <dd><input type = "checkbox" name="cuisine[]" value = "お好み焼き">お好み焼き</input></dd> 48 <dd><input type = "checkbox" name="cuisine[]" value = "クレープ">クレープ</input></dd> 49 </div> 50 <div> 51 <dd><input type = "checkbox" name="cuisine[]" value = "オムレツ">オムレツ</input></dd> 52 <dd><input type = "checkbox" name="cuisine[]" value = "野菜ランチ">野菜ランチ</input></dd> 53 <dd><input type = "checkbox" name="cuisine[]" value = "スイカアイス">スイカアイス</input></dd> 54 <dd><input type = "checkbox" name="cuisine[]" value = "豚骨ラーメン">豚骨ラーメン</input></dd> 55 <dd><input type = "checkbox" name="cuisine[]" value = "ハンバーグ">ハンバーグ</input></dd> 56 </div> 57 </div> 58 </div> 59 </div> 60 <div class = "get_cooking_staff_day"> 61 <h2 class="sec_title"><p>来月あなたの入れるシフト日を教えてください</p></h2> 62 <input type="text" id = "data_picker" name="send_available_day"></input> 63 <div class = "submit_box"> 64 <input type="submit" value = "送信する"></input> 65 </div> 66 </div> 67 </dl> 68 </div> 69 </form> 70 </section> 71</body> 72</html>

php

1<?php 2 3//データベース接続のための情報を先に格納しておく 4$dsn="mysql:host=localhost;dbname=shift_info;charset=utf8"; 5$user="root"; 6$pass="growry1293"; 7 8if((isset($_POST['staff_name']) && isset($_POST['cuisine'])) && isset($_POST['send_available_day'])){ 9 //名前とできる料理、シフトは入れる日が送信されたらデータを格納する 10 //送られてきた名前を変数$nameに格納// 11 $staff_name=htmlspecialchars($_POST["staff_name"],ENT_QUOTES); 12 //送られてきた料理可能な料理名を変数$cuisinesに格納 13 $cuisines=$_POST["cuisine"]; 14 $cuisines_csv=implode(',', $cuisines); 15 //送られてきたシフト入れる日を変数$available_dayに格納 16 $available_days=$_POST["send_available_day"]; 17 18 try{ 19 //データベースに接続 20 $db = new PDO($dsn,$user,$pass); 21 //cooking_staff_infoのテーブルに情報を格納していく 22 $db->query("INSERT INTO cooking_staff_info (staff_name,available_cuisine,send_available_day) 23 VALUES ('$staff_name','$cuisines_csv','$available_days)"); 24 }catch (Exception $e) 25 { 26 echo $e->getMessage() . PHP_EOL; 27 } 28 29 header("http://localhost:3000/shift_info/send_staffinfo.php"); 30 //"reservation_calender.php(予約フォームがあったページ)"に戻る 31 exit; 32} 33//開発者用:もしデータが送信されていなかったらエラーを表示する。 34else{ 35 print_r(" データの送信漏れがあります"); 36} 37 38 39function get_cooking_staff_info_by_db(){ 40 //データベース接続のための情報を先に格納しておく 41 $dsn="mysql:host=localhost;dbname=shift_info;charset=utf8"; 42 $user="root"; 43 $pass="growry1293"; 44 45 //データベース接続 46 $db = new PDO($dsn,$user,$pass); 47 //$psにcooking_staff_infoのテーブル情報を格納する 48 $ps = $db->query("SELECT * FROM cooking_staff_info"); 49 //調理スタッフの情報を入れる配列を用意する 50 $cooking_staff_info_all = array(); 51 52 foreach($ps as $out){ 53 //それぞれcooking_staff_infoのテーブルから引き出した情報を変数に格納する 54 $name_out = $out['staff_name']; 55 $cuisines_out = $out['available_cuisine']; 56 $available_day_out = $out['send_available_day']; 57 58 //調理スタッフの情報が入っている$cooking_staff_info変数にスタッフ名があったのなら 59 if(array_key_exists($name_out, $cooking_staff_info_all)){ 60 //名前、調理可能な料理名、入れるシフト日を配列$cooking_staff_infoに入れる。 61 array_push($cooking_staff_info_all[],$name_out, $cuisines_out,$available_day_out); 62 }else{ 63 $cooking_staff_info_all = [$name_out,$cuisines_out,$available_day_out]; 64 } 65 } 66 //調理スタッフの情報が入った変数を返す。 67 return $cooking_staff_info_all; 68} 69get_cooking_staff_info_by_db(); 70 71?> 72

試したこと

接続先のDB名やテーブル名が書き間違っているのかと思い確認しましたが、問題はありませんでした。いろいろと調べてみたのですが、いまいちよくわからず質問いたしました。お忙しいところ恐縮ですが、質問に回答していただけましたらありがたいです。

補足情報

データベースはmysqlを使っています。
xamppを使用しています。

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

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

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

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

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

guest

回答1

0

SQLエラーの原因はINSERT文のとこの、この後ろにシングルクォーテーションが無いからかと

'$available_days

コード熟読はしてないので、これだけですべて解決しているかはわかりませんけど。

後老婆心ながらプリペアステートメントのコードにした方がいいですよ

投稿2022/08/13 19:09

hirohiro

総合スコア2068

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問