Не добавляется запись из xml в бд, что делаю неправильно?

0

Уже были такие вопросы на сайте, но конкретных ответов решения не нашел. Что сделать? Уже и пробовал без null, напрямую задавать переменные. Все равно не выходит!

<?php
	

	function insert($name, $desc, $year, $rating, $poster, $category_id) {
		$mysqli = new mysqli('localhost', '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("Ошибка: не могу создать объект");

	

	//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_orignal;
		$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, $category_id);
	}

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



?>
php
mysql

3 ответов

3

Здравствуйте, Евгений

Хорошая практика для отлова ошибок в работе скрипта - это разбивать проверку функционала на несколько задач. Здесь можно разбить так:

1. Проверить, работает ли функция insert.

Комментируется или удаляется весь код, кроме функции insert и отдельно запускается данная функция с заполненными значениями вручную, примерно так:

<?php
	

function insert($name, $desc, $year, $rating, $poster, $category_id) {
	$mysqli = new mysqli('localhost', '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;
}

insert('Матрица', 'Описание фильма Матрица', '1999', 8.2, 'test.jpg', 1);


?>

Запускается скрипт в браузере. Если вставка в базу данных происходит успешно, значит эта часть кода рабочая.

2. Проверить, считываются ли данные из XML-файла.

Далее аналогичная проверка происходит с считыванием из XML файла данных. Можно просто в цикле пробовать выводить данные из XML по отдельности, например сначала вывести все названия фильмов, потом описание фильмов, потом год выпуска и т.д. по всем тем данным, которые используются в функции insert. 

Чтобы посмотреть все данные из массива, можно написать что-то вроде:

$xml = simplexml_load_file("xml_files/movies.xml") or die("Ошибка: не могу создать объект");

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

или использовать вместо print_r функцию var_dump(). 

3. Финальная проверка двух частей программы

Когда убеждаемся, что функция insert работает и необходимые данные есть в XML для вставки, два фрагмента кода объединяются и происходит финальная проверка скрипта.

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

0

Здравствуйте! Проверил. Не работает функция insert

0

Попробовал и так вставить (но без картинок), все равно, ничего не выходит

<?php

	$mysqli = new mysqli('localhost', 'root', '', 'kinomonster');
		
		if(mysqli_connect_errno()) {
		print_f('Соединение не установлено');
		exit();
        }
	
		$mysqli->set_charset('utf8');


	$xml = simplexml_load_file("xml_files/movies.xml") or die("Ошибка: не могу создать объект");
	

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

	

	$query = "INSERT INTO movie ('title_russian', 'title_orignal', 'year')" . "VALUES ($title, $title_orign, $year)";

	$result = false;

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

		return $result;
											}	
											
	


?>
Sign up or Log in to write an answer