So versuche ich eine lange angefügte SQL-Abfrage zu senden, die eine temporäre Tabelle auffüllen wird. Basierend auf der Tabelle bearbeite ich ein Array, das die verschiedenen Werte aus der Tabelle speichert.MySQL: Multi Query führt keine zweite und dritte angefügte Abfragen aus
Die erste INSERT-Anweisung läuft einwandfrei und wird korrekt in das Array eingefügt. Die nächsten zwei angefügten Abfragen scheinen das Array nicht zu füllen.
Nach einigen Fehlerprüfung habe ich überprüft, dass die Anweisungen die richtigen Werte am Ende der Abfrage haben.
HINWEIS: Benutzername, Passwort und Datenbank wurden aus dem Code entfernt
Jedwedes Hilfe ist sehr willkommen.
<?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);
?>
Das Problem hat mit den Werten von $e['CourseStartDate']
, $e['CourseEndDate']
, $e['InstructorFirstName']
, $e['InstructorLastName']
Sie haben 'CourseID int nicht null' /' PRIMARY KEY (CourseID) ', aber Ihre 2/3-Abfragen haben keinen' CourseID'-Wert, und da es kein 'auto_increment' ist, fallen sie wahrscheinlich aus Schlüsselfehler zu duplizieren. – Sean