Serebos
Новичок
надо так надо! Буду разбираться далее. Спасибо.Ошибки надо исправить
надо так надо! Буду разбираться далее. Спасибо.Ошибки надо исправить
Привет. Некоторые ошибки мне удалось исправить. В чистом виде код работает и добавляет необходимую запись в БД.Ошибки надо исправить
$host = 'localhost';
$db = 'kinomonster';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
$stmt = $pdo->prepare("INSERT INTO movie (id, name, description, year, rating, poster, add_date, category_id) VALUES (null, :name, :desc, :year, :rating, :poster, Now(), :category_id)");
$stmt->execute([
'name' => 'Walking to Paris',
'desc' => 'The feature film, directed by Peter Greenaway, tells the story of the twenty-seven-year-old Romanian sculptor Constantin Brancusi.',
'year' => 2020,
'rating' => 8.1,
'poster' => 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBx',
'category_id' => 1,
]);
echo "New records created successfully";
$host = 'localhost';
$db = 'kinomonster';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
$stmt = $pdo->prepare("INSERT INTO movie (id, name, description, year, rating, poster, add_date, category_id) VALUES (null, :name, :desc, :year, :rating, :poster, Now(), :category_id)");
$xml = simplexml_load_file("xml/movies.xml") or die("Error: Cannot create object");
$title = null;
$description = null;
$post = null;
$rating = null;
$year = null;
foreach ($xml as $movie_key => $movie) {
$title = $movie->title_russian;
$description = $movie->description;
$year = $movie->year;
foreach ($movie->poster->big->attributes() as $poster_key => $poster) {
$post = $poster;
}
if($movie->imdb) {
$rating = $movie->imdb->attributes()['rating'];
} else {
$rating = null;
}
$stmt->execute([
'name' => $title,
'desc' => $description,
'year' => $year,
'rating' => $rating,
'poster' => $post,
]);
insert($title, $description, $year, $rating, $post, 1);
echo "New records created successfully";
}
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number in C:\xampp\htdocs\kinomonster\index.php:54 Stack trace: #0 C:\xampp\htdocs\kinomonster\index.php(54): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\kinomonster\index.php on line 54
это исправил. В такой способ приду к стандартным шаблонам документов - и не буду отвлекаться на рекомендации с различных источников.Ты забыл самое главное - текст ошибки.
И забыл, что гораздо быстрее ее найти самому
Кроме того:
(Текст под тегом code почему-то не форматируется, поэтому пишу без этого тега)
$host = 'localhost';
$db = 'kinomonster';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$dsn = "mysql:host=localhost;dbname=kinomonster;charset=utf8mb4";
Invalid parameter number = Неправильное количество параметров.PHP:Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number in C:\xampp\htdocs\kinomonster\index.php:54 Stack trace: #0 C:\xampp\htdocs\kinomonster\index.php(54): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\kinomonster\index.php on line 54
$stmt = $pdo->prepare("INSERT INTO movie (id, name, description, year, rating, poster, add_date, category_id) VALUES (null, :name, :desc, :year, :rating, :poster, Now(), :category_id)");
$stmt = $pdo->prepare("INSERT INTO movie (id, name, description, year, rating, poster, add_date, category_id) VALUES (null, :name, :desc, :year, :rating, :poster, Now(), :category_id)");
$title = null;
$description = null;
$post = null;
$rating = null;
$year = null;
Тут открытым текстом сказано: "Invalid parameter number".если брать во внимание эту строку, то нет.
PHP:$stmt = $pdo->prepare("INSERT INTO movie (id, name, description, year, rating, poster, add_date, category_id) VALUES (null, :name, :desc, :year, :rating, :poster, Now(), :category_id)");
Конечно должно. в верхней строке - 8 плейсхолдеров (вместе с null и now).Тут открытым текстом сказано: "Invalid parameter number".
Количество параметров не соответствует количеству плейсхолдеров.
Как тогда должен выполниться запрос ?
Добавлено позже:
Вопрос: должно ли количество параметров при выполнении подготовленного запроса соответствовать количеству плейсхолдеров в самом запросе ?
$stmt = $pdo->prepare("INSERT INTO movie (id, name, description, year, rating, poster, add_date, category_id) VALUES (null, :name, :desc, :year, :rating, :poster, Now(), :category_id)");
$stmt->execute([
'name' => 'Walking to Paris',
'desc' => 'The feature film, directed by Peter Greenaway, tells the story of the twenty-seven-year-old Romanian sculptor Constantin Brancusi.',
'year' => 2020,
'rating' => 8.1,
'poster' => 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBx',
'category_id' => 1,
]);
$stmt->execute([
'name' => $title,
'desc' => $description,
'year' => $year,
'rating' => $rating,
'poster' => $post,
'category_id' => 1,
]);
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'rating' cannot be null in C:\xampp\htdocs\kinomonster\index.php:52 Stack trace: #0 C:\xampp\htdocs\kinomonster\index.php(52): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\kinomonster\index.php on line 52
else {
$rating = null;
}
if($movie->imdb) {
$rating = $movie->imdb->attributes()['rating'];
}
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'rating' cannot be null in C:\xampp\htdocs\kinomonster\index.php:51 Stack trace: #0 C:\xampp\htdocs\kinomonster\index.php(51): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\kinomonster\index.php on line 51