все делаю как по инструкции, а запись данных в таблицу все равно не происходит, пробовал разные варианты, такая же история. при этом данные из других таблиц прекрасно выводит.
update!
решил проблему, нужно добавить авто инкримент полю id, чтобы запросы могли добавляться, ибо он ругался, что нет поля.
у меня чего-то не работает fetchAll() , выводил через while какая еще есть альтернатива fetchAll()? в инете очень много вариантов нашел как вывести данные, но интересует самый популярный/удобный способ
я прошел курс php для начинающих но там про PDO ни слова. Помогите разобраться пожалуйста.
я создаю в PhpStorm класс с именем PDO
и добавляю туда код который написан у вас в статье для подключения к базе но подключение не происходит.
Могу конечно догадываться, что их нужно просто вставить в файл РНР, в котором решались задачки по РНР. Однако, необходимо не гадать, а знать точно, ибо после вставки первого кода и загрузки файла в браузер - происходят ошибки, и я теперь не уверен - я не то вставил, или не туда, или иное...
Можете ли Вы просто сказать - куда вставлять эти коды?
Да, вписать в файл.рнр;
потом загрузить файл в браузере - код выполнится, но в браузере ничего не покажет (или покажет ошибки, если они есть);
после этого результат можно будет увидеть в базе (в phpMyAdmin или в консоле).
<?php
$dbh = new \PDO(
'mysql:host=localhost;dbname=my_db;', // Имя хоста и Имя базы данных
'root', // Имя пользователя, в данном примере 'root'
'' // Пароль mysql, в данном примере пароль якобы изначально не задан и разрешён вход без пароля
);
$dbh->exec('SET NAMES UTF8');
$stm = $dbh->prepare('INSERT INTO users (`email`, `name`) VALUES (:email, :name)');
$stm->bindValue('email', '[email protected]');
$stm->bindValue('name', 'Вячеслав');
$stm->execute();
$stm = $dbh->prepare('INSERT INTO data (`name`, `year`) VALUES (:name, :year)');
$stm->bindValue('name', 'Имя');
$stm->bindValue('year', '1703');
$stm->execute();
Зачем тут именованные параметры :name и :year и для чего это связывание? Какая разница - передать напрямую в VALUES эти значения(мы же сами их и задаем) или через связывание?
Сначала мы создаём подготовленный запрос - он пока не выполняется. Заметьте, вместо значений мы указали :name и :year - это те параметры, в которые подставятся значения, заданные в следующих двух строках. В конце мы вызываем execute() - собственно, выполнить получившийся запрос.
Добрый день. Почему сразу не передать массив параметров в execute? Почему именно так пример построен?
А еще ничего не сказано про неименованные параметры и в каком виде можно возвращать данные. Наверное - это тоже одни из ключевых понятий.
Добрый день, Артем! При попытке подключения к базе данных выходит ошибка.
Fatal error: Uncaught PDOException: could not find driver in C:\OPENSERVER\OpenServer\domains\study\PDO.php:5 Stack trace: #0 C:\OPENSERVER\OpenServer\domains\study\PDO.php(5): PDO->__construct('mysql:host=loca...', 'root', 'root') #1 {main} thrown in C:\OPENSERVER\OpenServer\domains\study\PDO.php on line 5
Подскажите, пожалуйста, где найти потерянный драйвер?
Подскажите пожалуйста как вернуться на главную(index.php) и отобразить данные, введенные на другой странице: я создал 2 файла(в index.php я вывожу имя и e-mail (как у вас), в fillForm.php через форму добавляю новое имя и почтовый ящик вручную и нажимаю на submit).
Если я в fillForm.php указываю form action="/fillForm.php", то запись в БД происходит, но соответственно не могу сделать перенаправления на главную(index.php) чтобы посмотреть список с вновь добавленным именем и ящиком.
А если в fillForm.php указываю form action="/index.php", то переход на главную страницу (index.php) происходит, но запись в БД не успевает сделаться (что ли)?
А если в fillForm.php указываю form action="/index.php", то переход на главную страницу (index.php) происходит, но запись в БД не успевает сделаться (что ли)?
Нет, в таком случае у вас запрос на другую страницу уходит, с чего там должна происходить запись в БД?
мы получаем два значения, один с индексом, другой ассоциативный
например:
[id] = 1
[0] = 1
[name] = Петя
[1] = Петя
Зачем эти лишние значение в массиве?
все делаю как по инструкции, а запись данных в таблицу все равно не происходит, пробовал разные варианты, такая же история. при этом данные из других таблиц прекрасно выводит.
update!
решил проблему, нужно добавить авто инкримент полю id, чтобы запросы могли добавляться, ибо он ругался, что нет поля.
Действительно, прошу прощения за ошибку. Спасибо, исправил.
Лишняя запятая (AUTO_INCREMENT,,), а может мне кажется
Спасибо, поправил!
у меня чего-то не работает fetchAll() , выводил через while какая еще есть альтернатива fetchAll()? в инете очень много вариантов нашел как вывести данные, но интересует самый популярный/удобный способ
Популярного способа нет. Каждый способ лучше подходит для конкретного случая.
``- кавычки обязательно писать? Или можно как в phpadmin не писать их?
Это необязательно, но является правилом хорошего тона. Как и написание конструкций языка SQL большими буквами.
PDO ( PHP Data Objects ) - эта штука есть встроенная в PHP Admin или Open Server?
Ввожу в консоль
php -i | grep 'pdo'
как советуют тут https://p0vidl0.info/php-pdo-rabotaem-s-bazami-dannyx-pravilno.html для проверки, что это приложение есть на компьютере. И консоль не принимает команду. Вот скриншот: https://prnt.sc/qfpct2Тогда я нашел файл через поиск на дисках: https://prnt.sc/qfpf3c (в найстройках Open Server в модулях выставлен PHP_7.0).
Что дальше делать, как войти в PDO? В интернете кучу всего написано, но никакой внятной конкретики.
PDO - это модуль (либа) для PHP, которая по умолчанию установлена в OpenServer. Что значит войти в PDO?) Рассказывайте, что пытаетесь сделать)
Куда это вписывать?
Я пытался туда же, где пишем MySQL запросы, выдает ошибку. В командную панель cmd пытался - тоже ничего не выходит.
Может, нужно создать файл с расширением .php, вписать туда код и потом, войдя в Open Server, двойной клик на нем?
А вы изучением PHP ещё не занимались?
Нет еще. Мне надо научиться управлять базой данных, чтобы при добавлении контента на сайт не приходилось каждый раз его доверстывать.
А, тогда забейте на этот урок, позже вернётесь, после курса PHP для начинающих.
хорошо)
я прошел курс php для начинающих но там про PDO ни слова. Помогите разобраться пожалуйста.
я создаю в PhpStorm класс с именем PDO
и добавляю туда код который написан у вас в статье для подключения к базе но подключение не происходит.
все разобрался сам)))
Я прошёл курс РНР нля начинающих, но всё же тоже не знаю куда вставлять этот код:
И этот тоже:
И эти:
Могу конечно догадываться, что их нужно просто вставить в файл РНР, в котором решались задачки по РНР. Однако, необходимо не гадать, а знать точно, ибо после вставки первого кода и загрузки файла в браузер - происходят ошибки, и я теперь не уверен - я не то вставил, или не туда, или иное...
Можете ли Вы просто сказать - куда вставлять эти коды?
Привет. Какой у вас сервер в итоге? OpenServer или что-то другое? Пароль root пробовали?
Да, вписать в файл.рнр;
потом загрузить файл в браузере - код выполнится, но в браузере ничего не покажет (или покажет ошибки, если они есть);
после этого результат можно будет увидеть в базе (в phpMyAdmin или в консоле).
Зачем тут именованные параметры :name и :year и для чего это связывание? Какая разница - передать напрямую в VALUES эти значения(мы же сами их и задаем) или через связывание?
Происходит фильтрация и санитация данных. Исключается SQL Injection.
После этого мы можем выполнять запросы. Выглядит это так:
Сначала мы создаём подготовленный запрос - он пока не выполняется. Заметьте, вместо значений мы указали :name и :year - это те параметры, в которые подставятся значения, заданные в следующих двух строках. В конце мы вызываем execute() - собственно, выполнить получившийся запрос.
Спасибо, исправил!
Это оптимизация автозагрузки. В таком случае класс будет искаться сразу в корневом неймспейсе, а не в текущем. https://dev.to/elabftw/optimizing-your-php-app-speed-3hd4
Привет. Можно и сразу, разницы особо не будет.
Добрый день, Артем! При попытке подключения к базе данных выходит ошибка.
Fatal error: Uncaught PDOException: could not find driver in C:\OPENSERVER\OpenServer\domains\study\PDO.php:5 Stack trace: #0 C:\OPENSERVER\OpenServer\domains\study\PDO.php(5): PDO->__construct('mysql:host=loca...', 'root', 'root') #1 {main} thrown in C:\OPENSERVER\OpenServer\domains\study\PDO.php on line 5
Подскажите, пожалуйста, где найти потерянный драйвер?
Какая версия PHP? Что если другие повыбирать?
Артем, спасибо! Все получилось. В PHPStorm версия 7.4 была, в конфигурации OpenServer 7.1. Поменяла на 7.1.
Подскажите пожалуйста как вернуться на главную(index.php) и отобразить данные, введенные на другой странице: я создал 2 файла(в index.php я вывожу имя и e-mail (как у вас), в fillForm.php через форму добавляю новое имя и почтовый ящик вручную и нажимаю на submit).
Если я в fillForm.php указываю form action="/fillForm.php", то запись в БД происходит, но соответственно не могу сделать перенаправления на главную(index.php) чтобы посмотреть список с вновь добавленным именем и ящиком.
А если в fillForm.php указываю form action="/index.php", то переход на главную страницу (index.php) происходит, но запись в БД не успевает сделаться (что ли)?
с помощью header() Location.
Нет, в таком случае у вас запрос на другую страницу уходит, с чего там должна происходить запись в БД?
Как в запрос передавать не конкретное значение "Иван", а переменную?
Вместо 'Иван' написать $var
Почему после использования
мы получаем два значения, один с индексом, другой ассоциативный
например:
[id] = 1
[0] = 1
[name] = Петя
[1] = Петя
Зачем эти лишние значение в массиве?
Почитайте тут - https://www.php.net/manual/ru/pdostatement.fetch.php
Это настраивается
Раскройте вопрос: как работать с объектом (результат запроса) без преобразования в массив
Смотрите курс ООП, там это будет
Как искать по шаблону? Куда вставлять LIKE если я хочу, к примеру, найти имена содержащие "ва". Уже во все места ставил этот LIKE...