Если $rating присвоить null строка в таблицу базы не вставляется?
<?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')";
//$query = "INSERT INTO movie (`name`, `descriptions`, `year`, `rating`, `poster`, `add_date`, `category_id`) VALUES ('$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')";
$result = false;
//if($mysqli->query($query))
if( $mysqli->query($query) or die( $mysqli->error ) )
{
$result = true;
}
return $result;
}
$xml = simplexml_load_file("xml/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'];
} else {
$rating = 0; //Если присвоить null строка не вставляется (Incorrect double value: '' for column `kinomonster`.`movie`.`rating` at row 1)
}
insert($title, $title_orign, $year, $rating, $post, 1);
}
echo "<pre>";
print_r($xml);
echo "</pre>";
?>
5 ответов
В уроке есть подсказка:
При вставке в базу данных вы можете использовать и такой формат записи, где можно указывать название полей для вставки (соблюдая последовательность):
$query = "INSERT INTO movie (`name`, `descriptions`, `year`, `rating`, `poster`, `add_date`, `category_id`) VALUES ('$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')";
https://fructcode.com/ru/courses/php-and-mysql/video-parse-xml-to-mysql/
Здесь где-то был ответ от Сергея, по поводу данного задания, мне помог решить проблему. Суть там в том, чтобы разделить эту задачу на несколько подзадач, первая из которых будет функция insert. Когда функция готова, нужно проверить ее работоспособность на вставку данных вручную, типа такого:
insert('какойтофильм', 'origin', 2020, 10, 'img.jpg', 1);
Если вставка такая работает, далее нужно реализовывать вывод из xml файла, а уже только потом все вместе соединять.
Можно попробовать проверить структуру таблицы в базе данных, может где-то параметры с ошибками или из исходного кода дамп взять и у себя развернуть, в исходнике всегда работает.
Выше в коде эта строка заремарена, так тоже не проходит :(
Строки где $rating не присвоено null вставляются;
также работает $rating = 0;