А я и не писал что вызовет.Если даже вывести сообщение внутри catch - то это не вызовет трассировки стека и его вывод.
Выводить что-нибудь внутри catch - это просто глупо, без всякой связи с трассировкой

Пардон что четко не обозначил этот момент.

А я и не писал что вызовет.Если даже вывести сообщение внутри catch - то это не вызовет трассировки стека и его вывод.

А сам бросил исключение вместо вывода.Правильно. Главное не выводить это внутри catch
Не в этом случаеА бросая новое исключение с текстом сообщения об ошибке мы как раз избавляемся от стека вызовов

Мы говорим об одном и том же. просто вышла небольшая путаница.А теперь попробуй сделать так, чтобы параметры были видны.



Опять 25. Всё наоборот жеесли исключение выброшено и его некому поймать В реальных проектах такого не бывает.
Я неточно выразился, поэтому ты неправильно меня понял. Когда я говорил, что исключение некому поймать - то имел ввиду, что в клиентском коде нет try ... catch или обработчика исключений и исключение ловит обработчик по умолчанию, встроенный в PHP. Даже в самом простом проекте есть обработчик исключений (и не важно, это try ... catch, обернутое над всем кодом или callable, установленное с помощью set_exception_handler).Опять 25. Всё наоборот же
Если исключение выброшено и его некому поймать - это нормально. Так и должно быть.
$host = 'localhost';
$db = 'kinomonster';
$user = 'root';
$pass = '';
$charset = 'utf8';
$options = [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
];
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new \PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
//die('PDO connection error: ' . $e->getMessage());
throw new \Exception('PDO connection error: ' . $e->getMessage());
}
$stmt = $pdo->prepare("INSERT INTO movie VALUES(null, ?,?,?,?,?, Now(),?)";
$stmt->bind_param("ssssss", $name, $desc, $year, $rating, $poster, $category_id);
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();
}
Так лучше не делать. Задавайте DSN как один параметр конфигурации. Далеко не все БД имеют идентичные (да даже просто похожие!) структуры DSN.$host = 'localhost'; $db = 'kinomonster'; $user = 'root'; $pass = ''; $charset = 'utf8';
А вот так совершенно точно делать не стоит. Никогда не используйте суперпользователя для обычной работы с БД. (Я уже молчу про то, что при следующем обновлении муськи у вас это всё сломается, т.к. у рута не будет доступа к БД для работы, только для обслуживания.)$user = 'root'; $pass = '';
utf8mb4$charset = 'utf8';
А статью вы не читали. Идите перечитывайте. https://phpdelusions.net/pdo$stmt->bind_param
Материал я этот смотрел, но также я пытался объединить все вчерашние рекомендации...Так лучше не делать. Задавайте DSN как один параметр конфигурации. Далеко не все БД имеют идентичные (да даже просто похожие!) структуры DSN.
А вот так совершенно точно делать не стоит. Никогда не используйте суперпользователя для обычной работы с БД. (Я уже молчу про то, что при следующем обновлении муськи у вас это всё сломается, т.к. у рута не будет доступа к БД для работы, только для обслуживания.)
utf8mb4
А статью вы не читали. Идите перечитывайте. https://phpdelusions.net/pdo
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email AND status=:status');
$stmt->execute(['email' => $email, 'status' => $status]);
$user = $stmt->fetch();
$host = 'localhost';
$db = 'kinomonster';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli($host, $user, $pass, $db);
$mysqli->set_charset($charset);
} catch (\mysqli_sql_exception $e) {
throw new \mysqli_sql_exception($e->getMessage(), $e->getCode());
}
unset($host, $db, $user, $pass, $charset); // we don't need them anymore
$stmt = $mysqli->prepare("INSERT INTO movie VALUES(null, ?,?,?,?,?, Now(),?)";
$stmt->bind_param("sssss", $name, $desc, $year, $rating, $poster, $category_id);
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();
}
При всём уважении, есть желание ответить - "а надо было читать".Материал я этот смотрел
Здесь "не так" помойка из двух драйверов. И, да, текст ошибок надо читать самому в первую очередь.что здесь не так?
Ошибки надо исправитьПереписал, и вновь с ошибками.
хорошо, спасибо! я переведу все дословно и еще раз взгляну на статью. Как раз и новые слова узнаю.При всём уважении, есть желание ответить - "а надо было читать".
В статье очень доходчиво излагаются не только приёмы использования, но и причины использования именно этих приёмов.
Ваш код рабочий, просто надо выкинуть найух bind_param и поправить вызов execute().