1
0

Я проходила курс PHP/MySQL, работала с XML, записывала данные XML в базу и столкнулась со следующей проблемой. Я записала код и после его активации в базе данных обнаружила, что не все данные XML перенеслись в базу. Поняла, что перенеслись данные только о тех фильмах, у которых был рейтинг. Пыталась самостоятельно устронить эту проблему, заново переписывая код, но ничего не произошло. Затем я проверила правильный синтаксис и написание тегов. Результат не менялся. Затем я решила скачать исходный код к уроку и действовать с его помощью. Свой код я стёрла и скопировала раннее скачаный код. Результат по прежнему не изменился. Пожалуйста, подскажите мне метод для исправления данной ошибки.

<?php 

	function insert($name, $desc, $year, $rating, $poster, $category_id) {
		$mysqli = new mysqli('localhost', 'root', 'root', 'kinomonster');

		if(mysqli_connect_errno()) {
			print_f('Соедение не установлено');
			exit();
		}

		$mysqli->set_charset('utf8');

		$query = "INSERT INTO movie VALUES(null, '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')";

		$result = false;

		 if( $mysqli->query($query)) {
			$result = true;
		}

		return $result;
	}

	
$xml = simplexml_load_file("xml_files/movies.xml") or die("Error: Cannot create object");

	//echo count($xml);

	$title = null;
	$title_orign = null;
	$post = null;
	$rating = null;
	$year = null;

	foreach ($xml as $movie_key => $movie) {
		$title = $movie->title_russian;
		$title_orign = $movie->title_original;
		$year = $movie->year;
		

		foreach ($movie->poster->big->attributes() as $poster_key => $poster) {
			$post = $poster;
		}

		if($movie->imdb) {
			$rating = $movie->imdb->attributes()['rating'];
		} 

		insert($title, $title_orign, $year, $rating, $post, 1);

	}

	echo "<pre>";
	print_r($xml);
	echo "</pre>";



?>

Зуева Алина
4 years ago






Когда я эксперементирую с SQL запросами я вывожу их командой echo $query."<br>"; прямо перед выполнением запроса, т.е. перед командой $mysqli->query($query). И такой же результат, как у Вас, с пропуском строк у меня выходил, когда я пытался записать слово null в поле rating (с типом FLOAT). Поскольку я немного модифицировал свой код, то "работающий" запрос на запись, который не пропускает, а добавляет строку выглядит у меня примерно так:

"INSERT INTO movie (id, name,descriptions,year,rating ,poster,category_id,add_date) VALUES (null,'Джой','Joy', '2015','','http://c.cinemate.cc/media/m/4/5/154054/0.big.jpg','1', Now())"

т.е. в поле rating записывается не null, а '' (две одинарные кавычки).

Андрей Фёдоров
3 years ago

Один ответ