2016-04-28 2 views
0

Я пытаюсь вставить значения в таблицу в моей базе данных. Первый параметр - это непустая переменная, следующие два - это два столбца, которые я хочу передать. Что не так с моей логикой здесь.Как передать значения моего запроса из mysqli_fetch_array?

$query = "SELECT cnum, cname FROM course WHERE specialization = '0'"; 
$result = mysqli_query($conn,$query); 

if (!$result) die ("Database access failed: " . $conn->error); 

$rows = $result->num_rows;  
for ($j =0; $j<$rows;++$j) { 

    $row = mysqli_fetch_array($result); 
    $query = "INSERT INTO student_schedule VALUES ('$studentID', '$row[0]', '$row[1]', '0')"; 

    $result = $conn->query($query); 
    if (!$result) die ("Database access failed: " . $conn->error); 

} 
+0

Это не работает? Любая ошибка брошена? – choz

+0

Да, я получаю ожидаемый $ result как параметр, но boolean вместо этого передается mysqli_fetch_array –

ответ

1

Ваше решение

<?php 
$query = "SELECT cnum, cname FROM course WHERE specialization = '0'"; 
$result = mysqli_query($conn,$query); 
if (!$result) die ("Database access failed: " . $conn->error); 

while ($row = mysqli_fetch_array($result)) { 
    $insertQuery = "INSERT INTO student_schedule VALUES ('" . $conn->real_escape_string($studentID) . "', '" . $conn->real_escape_string($row[0]) . "', '" . $conn->real_escape_string($row[1]) . "', '0')"); 
    $insert = $conn->query($insertQuery); 
    if (!$result) die ("Database access failed: " . $conn->error); 
} 
?> 

Кроме того, как правило, я предлагаю вам не смешивать MySQLi процедурный код с объектно-ориентированного кода. Наконец, я также предлагаю удалить ошибку, выводящую $conn->error, вместо этого возьмите ошибку и распечатайте собственное сообщение об ошибке. Это уменьшает атаки на инъекции.

+0

после изменения вашего решения. Я получаю уведомление: неопределенное смещение: 0 в C: \ xampp \ htdocs \ journalism.php в строке 140 Примечание: неопределенный смещение: 1 в C: \ xampp \ htdocs \ journalism.php в строке 140 Примечание: использование неопределенного постоянного результата - предполагаемый «результат» в C: \ xampp \ htdocs \ journalism.php в строке 142 –

+0

@Murph_Fish change ' $ insert = $ conn-> query ($ insertQuery); 'to' $ result = $ conn-> query ($ insertQuery); 'если вы используете решение @LFlare. также $ отсутствует в вашей if (! result) die («Ошибка доступа к базе данных:». $ conn-> error); – VipindasKS

+0

@VipindasKS после этих исправлений Я получаю неопределенное смещение 0 и неопределенное смещение 1, указывающее на $ insertquery любые идеи? –

0

Ваш код уязвим для SQL Injections, что может быть причиной его неправильной работы.

Вы должны экранировать данные, прежде чем включать его в запрос SQL:

for ($j =0; $j<$rows;++$j) { 

    $row = mysqli_fetch_array($result); 
    $query = $conn->prepare("INSERT INTO student_schedule VALUES (?, ?, ?, '0')"; 
    $query->bind_param('iss', $studentID, $row[0], $row[1]); 
    $result = $query->execute(); 
    if (!$result) die ("Database access failed: " . $conn->error); 

} 

Вы можете найти более подробную информацию о bind_param() функции в PHP manual.

+0

после подключения этого в я получаю Неустранимая ошибка: не удается передать параметр 5 по ссылке в C: \ ......... в строке 145 –

+0

@Murph_Fish да, была проблема. Ответ теперь редактируется, вы можете попробовать еще раз. –