Не добавляется запись из xml в бд, что делаю неправильно?
Уже были такие вопросы на сайте, но конкретных ответов решения не нашел. Что сделать? Уже и пробовал без 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>";
?>
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 для вставки, два фрагмента кода объединяются и происходит финальная проверка скрипта.
Попробуйте в такой последовательности самостоятельно найти ошибку, это намного эффективнее, чем просто получить готовый код.
Здравствуйте! Проверил. Не работает функция insert
Попробовал и так вставить (но без картинок), все равно, ничего не выходит
<?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;
}
?>