2016-04-12 16 views
1

一時的なテーブルにデータを追加するSQLクエリを送信しようとしています。テーブルに基づいて、私はテーブルから異なる値を格納する配列を作成しています。MySQL:マルチクエリで2番目と3番目の追加クエリが実行されない

最初の挿入ステートメントは完全に正常に実行され、正しく配列に挿入されます。次の2つの追加されたクエリは、配列にデータを挿入していないようです。

私はいくつかのエラーチェックを行った後、ステートメントがクエリの最後に正しい値を持つことを確認しました。

注:ユーザ名、パスワード、およびデータベースは、任意およびすべてのヘルプははるかに高く評価されているコード

から削除されました。

<?php 
session_start(); 
$servername = "localhost"; 
$username = ""; 
$password = ""; 
$db   = ""; 

$conn  = new mysqli($servername, $username, $password, $db); 
if ($conn->connect_error) { 
die("Connection failed:" . $conn->connect_error); 
} 

$courseID = $_GET['id']; 
echo $courseID; 

$studentID = $_SESSION['memberID']; 
echo $studentID; 

$maketemp = "CREATE TEMPORARY TABLE IF NOT EXISTS TempCourseProfile (
CourseID int not null, 
CourseName varchar(100), 
CourseDescription varchar(200), 
CourseObjectives varchar(200), 
CourseStartDate date, 
CourseEndDate date, 
InstructorFirstName varchar(50), 
InstructorLastName varchar(50), 
PRIMARY KEY(CourseID))"; 

if($conn->query($maketemp) === TRUE){ 
echo "you win"; 
} 
else { 
echo "you lose"; 
} 

$query = "INSERT INTO TempCourseProfile(CourseID, CourseName, CourseDescription, CourseObjectives) 
SELECT CourseID, CourseName, CourseDescription, CourseObjectives FROM Course  WHERE CourseID = $courseID;"; 

$query .= "INSERT INTO TempCourseProfile(CourseStartDate, CourseEndDate) 
Select CI.ClassStartDate, CI.ClassEndDate From CourseInSemester CI JOIN  ClassSchedule CS on CI.CourseInSemesterID = CS.CourseInSemesterID WHERE  CS.StudentID = $studentID AND CI.CourseID = $courseID;"; 

$query .= "INSERT INTO TempCourseProfile(InstructorFirstName, InstructorLastName) 
    Select M.FirstName, M.LastName from Member M JOIN CourseInSemester CI ON CI.TeacherID = M.MemberID JOIN ClassSchedule CS ON CS.CourseInSemesterID = CI.CourseInSemesterID WHERE CI.CourseID = $courseID AND CS.StudentID = $studentID;"; 

echo $query; 
if ($conn->multi_query($query)) { 
do{ 
    echo "added"; 

}while($conn->next_result()); 
} else { 
echo "failed to create temp" . $conn->error; 
} 

$tmparray = array(); 
$sql  = "SELECT * FROM TempCourseProfile where CourseID = $courseID"; 
//$result = $conn->query($sql); 
if($result = $conn->query($sql)){ 
while ($r = $result->fetch_array()) { 
$e      = array(); 
$e['CourseID']   = $r['CourseID']; 
$e['CourseName']   = $r['CourseName']; 
$e['CourseDescription']   = $r['CourseDescription']; 
$e['CourseObjectives']    = $r['CourseObjectives']; 
$e['CourseStartDate']   = $r['CourseStartDate']; 
$e['CourseEndDate'] = $r['CourseEndDate']; 
$e['InstructorFirstName'] = $r['InstructorFirstName']; 
$e['InstructorLastName'] = $r['InstructorLastName']; 
array_push($tmparray, $e); 
} 

} else { 
echo $conn->error; 
} 


echo json_encode($tmparray); 

?> 

問題が$e['CourseStartDate']$e['CourseEndDate']$e['InstructorFirstName']$e['InstructorLastName']

+0

あなたは 'CourseID int not null' /' PRIMARY KEY(CourseID) 'を持っていますが、2番目/ 3番目のクエリは' CourseID'値を持たず、 'auto_increment'ではないので、重複したキーのエラーになります。 – Sean

答えて

2
  1. 使用しないでくださいmulti_queryの値に対処しなければなりません。クエリを1つずつ実行します。
  2. いつもmysqliがエラーを報告します。あなたのデータベースに何が間違っているのかを人々に尋ねるのは役に立ちません。あなたのデータベースだけがあなたに確かなことを伝えることができます。

だから、このよう

$queries = ["CREATE TEMPORARY TABLE IF NOT EXISTS TempCourseProfile (
CourseID int not null, 
CourseName varchar(100), 
CourseDescription varchar(200), 
CourseObjectives varchar(200), 
CourseStartDate date, 
CourseEndDate date, 
InstructorFirstName varchar(50), 
InstructorLastName varchar(50), 
PRIMARY KEY(CourseID))"]; 

$queries[] = "INSERT INTO TempCourseProfile(CourseID, CourseName, CourseDescription, CourseObjectives) 
SELECT CourseID, CourseName, CourseDescription, CourseObjectives FROM Course  WHERE CourseID = $courseID;"; 

$queries[] = "INSERT INTO TempCourseProfile(CourseStartDate, CourseEndDate) 
Select CI.ClassStartDate, CI.ClassEndDate From CourseInSemester CI JOIN  ClassSchedule CS on CI.CourseInSemesterID = CS.CourseInSemesterID WHERE  CS.StudentID = $studentID AND CI.CourseID = $courseID;"; 

$queries[] = "INSERT INTO TempCourseProfile(InstructorFirstName, InstructorLastName) 
    Select M.FirstName, M.LastName from Member M JOIN CourseInSemester CI ON CI.TeacherID = M.MemberID JOIN ClassSchedule CS ON CS.CourseInSemesterID = CI.CourseInSemesterID WHERE CI.CourseID = $courseID AND CS.StudentID = $studentID;"; 

foreach ($queries as $query) { 
    $conn->query($query) or trigger_error($conn->error); 
} 

あなたのコードを作るこのコードは無駄な迷惑メールをエコーし​​ませんが、まだそれが発生すると、それは、正確なエラーを報告します。

関連する問題