Попасть в базу данных в цикле php - PullRequest
0 голосов
/ 27 ноября 2018

Я очень новичок в PHP.Я просто создаю простую страницу, которая извлекает данные из базы данных и генерирует XML.Есть две таблицы, одна из которых имеет таблицу конкурентов, а вторая имеет ранжирование для этих конкурентов, поэтому я могу получить данные кандидата, и когда я зацикливаюсь на этих данных и пытаюсь снова попасть в БД в цикле, получая следующую ошибку:

Неопределенная переменная: mysqli in

Неустранимая ошибка: вызов функции-члена query () для null в

Я пробовал несколько вещей, но это нене работаетвот мой код:

<?php
/** create XML file */ 
$mysqli = new mysqli("localhost", "root", "******", "****");
/* check connection */
if ($mysqli->connect_errno) {
   echo "Connect failed ".$mysqli->connect_error;
   exit();
}else{
}
$query = "select * from competitors where eventid=290 order by 1 desc LIMIT 0, 10;";
$booksArray = array();
if ($result = $mysqli->query($query)) {
/* fetch associative array */
   while ($row = $result->fetch_assoc()) {
   array_push($booksArray, $row);
  }
   if(count($booksArray)){
createXMLfile($booksArray);

 }
/* free result set */
   $result->free();
}
function createXMLfile($booksArray){
   $filePath = 'book.xml';
   $dom     = new DOMDocument('1.0', 'utf-8'); 
   $root      = $dom->createElement('books'); 
   for($i=0; $i<count($booksArray); $i++){
$eventid        =  $booksArray[$i]['eventid'];  
 $fee      =  $booksArray[$i]['fee']; 
$competitorid_system    =  $booksArray[$i]['competitorid'];
$datetimeentered     =  $booksArray[$i]['datemodified']; 
// $bookISBN      =  $booksArray[$i]['ISBN']; 
//  $bookCategory  =  $booksArray[$i]['category'];  
$book = $dom->createElement('book');
 $book->setAttribute('eventid', $eventid);
$name     = $dom->createElement('fee', $fee); 
$book->appendChild($name); 
$author   = $dom->createElement('competitorid_system', $competitorid_system); 

 $book->appendChild($author); 

 $price    = $dom->createElement('datetimeentered', $datetimeentered); 

$book->appendChild($price); 

// fetch other data
$query = "select * from ranking where eventid=290 and competitorid=".$competitorid_system;;

 echo "Query".$query;
   //exit();
$booksRankingArray = array();
if ($result = $mysqli->query($query)) {
/* fetch associative array */
while ($row = $result->fetch_assoc()) {
array_push($booksRankingArray, $row);
}
if(count($booksRankingArray)){
createXMLfile($booksRankingArray);
 }
/* free result set */
$result->free();
}
$root->appendChild($book);
}
$dom->appendChild($root); 
$dom->save($filePath); 
} 
/* close connection */
$mysqli->close();

1 Ответ

0 голосов
/ 27 ноября 2018

Переменная $mysqli выходит за рамки createXMLfile().

Область действия переменной - это контекст, в котором она определена.По большей части все переменные PHP имеют только одну область видимости.Эта единая область действия включает в себя и необходимые файлы.

Пожалуйста, обратитесь к руководству по PHP, чтобы понять область действия переменной .

Чтобы решить проблему, измените сигнатуру функции на

function createXMLfile($mysqli, $booksArray)
{ 
    // … rest of code …
}

А затем передайте переменную из внешней области в область функции:

$mysqli = new mysqli("localhost", "root", "******", "****");
$booksArray = array();    
createXMLfile($mysqli, $booksArray);

Вы также можете использовать глобальную переменную для извлечения переменных из глобальной области:

function createXMLfile($booksArray)
{ 
    global $mysqli;
    // … rest of code …    
}

Но использование глобальных переменных, как правило, не рекомендуется , потому что это приводит к тесно связанному коду и делает код менее легким для рассуждения.

...