Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

Не работает PHP (PDO/ INSERT/ SELECT)

#php #pdo #insert


Я начал изучать и PHP, и ASP.NET, пока что у меня в голове каша..
ОС: Ubuntu 18.04
Сервер:  Server version: Apache/2.4.29 (Ubuntu)/

Server built:   2018-10-10T18:59:25


PHP:    PHP 7.2.15-0ubuntu0.18.04.1
MySQL: mysql  Ver 14.14 Distrib 5.7.25
phpmyadmin:  4.8.5

Содержание index.php:




    
    Document


    




А внутри add.php расположен след. код:





А внутри controller.php расположен следующий код: prepare($sql); $statment -> bindParam(":theme", $_POST['theme']); $statment -> bindParam(":text", $_POST['text']); $statment -> execute(); Вроде всё кажется правильным, но почему-то в базу не добавляет введенные данныею И еще как сделать так, чтоб при нажатии, на кнопку AddDB и отправил запрос,и потом возвращался на главную страницу?


Ответы

Ответ 1



Это очень хорошй и важный вопрос. Но ответ на него не совсем очевидный. И звучит он так: "Надо правильно соединяться с PDO". Вообще, тема "что делать, если код не работает" довольно обширная, но самое первое, что надо делать в таком случае - это попросить РНР сообрщать обо всех ошибках, которые произошли в скрипте. А в данном случае - попросить ПДО сообщать об ошибке, произошедшей при выполнении запроса. И вот как раз для этого и надо правильно соединяться: Как правильно соединяться с Mysql в PDO. помимо других важных настроек мы таже сконфигурируем правильный режим выброса ошибок для PDO. После этого PDO начнет нам говорить, в чем у нас проблема! Надо только убедиться, что PHP в принципе настроен так, чтобы сообщать об ошибках. PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $dsn = "mysql:host=localhost;dbname=input_db;charset=utf8mb4"; try { $pdo = new PDO($dsn, "root", "123", $options); } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } $sql = "INSERT INTO tables (theme, text) VALUES (:theme, :text)"; $statment = $pdo->prepare($sql); $statment -> bindParam(":theme", $_POST['theme']); $statment -> bindParam(":text", $_POST['text']); $statment -> execute(); Скорее всего PDO сообщит о том, что не найдена база данных или хост. Поскольку никаких украшений (включая пробелы) в DSN быть не должно. Но конкретная ошибка в данном случае не важна, поскольку ошибки всегда разные, и на все случаи все равно ответить невозможно. Но это и не нужно - надо просто прочитать сообщение об ошибке, и исправить её.

Комментариев нет:

Отправить комментарий