2016-04-12 3 views
1

Так что я пытаюсь послать длинный прилагаемую SQL запрос, который будет заполнять временную таблицу. Основываясь на таблице, я заполняю массив, в котором хранятся разные значения из таблицы.MySQL: Мульти запрос не выполняется второе и 3 добавляются запросы

Первый оператор вставки работает прекрасно, и правильно вставляет в массив. Следующие два прилагаемых запроса, похоже, не заполняют массив.

После выполнения некоторых проверки ошибок я проверить, что операторы имеют правильные значения на конце запроса.

Примечание: имя пользователя, пароль и базу данных, были удалены из кода

Любые и вся помощь очень ценится.

<?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 не null' /' PRIMARY KEY (CourseID) ', но ваш 2-й/3-й запросы не имеют' значение CourseID', и так как он не является 'auto_increment' они, вероятно, из-за неудачу для «дублирования ключей». – Sean

ответ

2
  1. Не используйте multi_query. Выполняйте свои запросы один за другим.
  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); 
} 

этот код не будет эхо какой-либо бесполезный спам, пока он сообщит точную ошибку, как только это происходит.

 Смежные вопросы

  • Нет связанных вопросов^_^