今起きている問題
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を使用しています。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。