Новый комментарий

babka.s.miniganom 20.07.2018 в 16:03

все делаю как по инструкции, а запись данных в таблицу все равно не происходит, пробовал разные варианты, такая же история. при этом данные из других таблиц прекрасно выводит.
update!
решил проблему, нужно добавить авто инкримент полю id, чтобы запросы могли добавляться, ибо он ругался, что нет поля.

ivashkevich 21.07.2018 в 06:22

Действительно, прошу прощения за ошибку. Спасибо, исправил.

Pro100Bah 21.04.2019 в 10:10
CREATE TABLE `data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,,
  `name` varchar(32) DEFAULT NULL,
  `year` char(4) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Лишняя запятая (AUTO_INCREMENT,,), а может мне кажется

ivashkevich 21.04.2019 в 17:18

Спасибо, поправил!

esqrx 04.07.2019 в 04:19

у меня чего-то не работает fetchAll() , выводил через while какая еще есть альтернатива fetchAll()? в инете очень много вариантов нашел как вывести данные, но интересует самый популярный/удобный способ

ivashkevich 07.07.2019 в 17:44

Популярного способа нет. Каждый способ лучше подходит для конкретного случая.

XXX 19.09.2019 в 22:31

``- кавычки обязательно писать? Или можно как в phpadmin не писать их?

ivashkevich 21.09.2019 в 07:15

Это необязательно, но является правилом хорошего тона. Как и написание конструкций языка SQL большими буквами.

[email protected] 26.12.2019 в 00:38

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? В интернете кучу всего написано, но никакой внятной конкретики.

ivashkevich 26.12.2019 в 19:10

PDO - это модуль (либа) для PHP, которая по умолчанию установлена в OpenServer. Что значит войти в PDO?) Рассказывайте, что пытаетесь сделать)

[email protected] 26.12.2019 в 21:52

Куда это вписывать?

$dbh = new \PDO(
    'mysql:host=localhost;dbname=users;',
    'root',
    ''
);

Я пытался туда же, где пишем MySQL запросы, выдает ошибку. В командную панель cmd пытался - тоже ничего не выходит.

Может, нужно создать файл с расширением .php, вписать туда код и потом, войдя в Open Server, двойной клик на нем?

ivashkevich 27.12.2019 в 03:19

А вы изучением PHP ещё не занимались?

[email protected] 27.12.2019 в 08:35

Нет еще. Мне надо научиться управлять базой данных, чтобы при добавлении контента на сайт не приходилось каждый раз его доверстывать.

ivashkevich 27.12.2019 в 08:52

А, тогда забейте на этот урок, позже вернётесь, после курса PHP для начинающих.

[email protected] 27.12.2019 в 21:34

хорошо)

[email protected] 06.02.2020 в 23:28

я прошел курс php для начинающих но там про PDO ни слова. Помогите разобраться пожалуйста.
я создаю в PhpStorm класс с именем PDO
и добавляю туда код который написан у вас в статье для подключения к базе но подключение не происходит.

[email protected] 06.02.2020 в 23:38

все разобрался сам)))

Deo 05.01.2021 в 15:29

Я прошёл курс РНР нля начинающих, но всё же тоже не знаю куда вставлять этот код:

$dbh = new \PDO(
    'mysql:host=localhost;dbname=my_db;',
    'root',
    ''
);

И этот тоже:

$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();

Могу конечно догадываться, что их нужно просто вставить в файл РНР, в котором решались задачки по РНР. Однако, необходимо не гадать, а знать точно, ибо после вставки первого кода и загрузки файла в браузер - происходят ошибки, и я теперь не уверен - я не то вставил, или не туда, или иное...
Можете ли Вы просто сказать - куда вставлять эти коды?

ivashkevich 06.01.2021 в 02:55

Привет. Какой у вас сервер в итоге? OpenServer или что-то другое? Пароль root пробовали?

Deo 10.01.2021 в 02:51

Да, вписать в файл.рнр;
потом загрузить файл в браузере - код выполнится, но в браузере ничего не покажет (или покажет ошибки, если они есть);
после этого результат можно будет увидеть в базе (в 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();
X-Nick 26.02.2020 в 23:41
$stm = $dbh->prepare('INSERT INTO data (`name`, `year`) VALUES (:name, :year)');
$stm->bindValue('name', 'Имя');
$stm->bindValue('year', '1703');
$stm->execute();

Зачем тут именованные параметры :name и :year и для чего это связывание? Какая разница - передать напрямую в VALUES эти значения(мы же сами их и задаем) или через связывание?

ivashkevich 28.02.2020 в 05:04

Происходит фильтрация и санитация данных. Исключается SQL Injection.

Fill 17.04.2020 в 20:36

После этого мы можем выполнять запросы. Выглядит это так:

$stm = $dbh->prepare('INSERT INTO users (`email`, `name`) VALUES (:email, :name)');
$stm->bindValue('email', '[email protected]');
$stm->bindValue('name', 'Вячеслав');
$stm->execute();

Сначала мы создаём подготовленный запрос - он пока не выполняется. Заметьте, вместо значений мы указали :name и :year - это те параметры, в которые подставятся значения, заданные в следующих двух строках. В конце мы вызываем execute() - собственно, выполнить получившийся запрос.

ivashkevich 18.04.2020 в 05:58

Спасибо, исправил!

bibelman 28.06.2020 в 17:25
$dbh = new \PDO  - зачем косая палка перед PDO? Я только здесь такую увидел.
ivashkevich 29.06.2020 в 11:13

Это оптимизация автозагрузки. В таком случае класс будет искаться сразу в корневом неймспейсе, а не в текущем. https://dev.to/elabftw/optimizing-your-php-app-speed-3hd4

X-Nick 16.08.2020 в 12:18

$stm = $dbh->prepare('INSERT INTO users (`email`, `name`) VALUES (:email, :name)');
$stm->bindValue('email', '[email protected]');
$stm->bindValue('name', 'Вячеслав');
$stm->execute();


Добрый день. Почему сразу не передать массив параметров в execute? Почему именно так пример построен?
А еще ничего не сказано про неименованные параметры и в каком виде можно возвращать данные. Наверное - это тоже одни из ключевых понятий.
ivashkevich 17.08.2020 в 06:32

Привет. Можно и сразу, разницы особо не будет.

Larisa 22.11.2020 в 18:02

Добрый день, Артем! При попытке подключения к базе данных выходит ошибка.
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

Подскажите, пожалуйста, где найти потерянный драйвер?

ivashkevich 23.11.2020 в 17:39

Какая версия PHP? Что если другие повыбирать?

Larisa 23.11.2020 в 20:54

Артем, спасибо! Все получилось. В PHPStorm версия 7.4 была, в конфигурации OpenServer 7.1. Поменяла на 7.1.

zick 19.12.2020 в 22:03

Подскажите пожалуйста как вернуться на главную(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) происходит, но запись в БД не успевает сделаться (что ли)?

ivashkevich 21.12.2020 в 06:41

с помощью header() Location.

А если в fillForm.php указываю form action="/index.php", то переход на главную страницу (index.php) происходит, но запись в БД не успевает сделаться (что ли)?

Нет, в таком случае у вас запрос на другую страницу уходит, с чего там должна происходить запись в БД?

Vitall 22.12.2020 в 13:53

Если в SELECT-запросе нужно добавить какие-то параметры, то делается это аналогично:

<?php
...
$stm = $dbh->prepare('SELECT * FROM `users` WHERE name=:name');
$stm->bindValue('name', 'Иван');
$stm->execute();
$allUsers = $stm->fetchAll();
...

Как в запрос передавать не конкретное значение "Иван", а переменную?

ivashkevich 23.12.2020 в 07:27

Вместо 'Иван' написать $var

Vladimir96 25.04.2021 в 23:59

Почему после использования

$allUsers = $stm->fetchAll();

мы получаем два значения, один с индексом, другой ассоциативный
например:
[id] = 1
[0] = 1
[name] = Петя
[1] = Петя
Зачем эти лишние значение в массиве?

ivashkevich 28.04.2021 в 19:16

Почитайте тут - https://www.php.net/manual/ru/pdostatement.fetch.php
Это настраивается

VadimNeo 15.08.2021 в 17:53

Раскройте вопрос: как работать с объектом (результат запроса) без преобразования в массив

ivashkevich 18.08.2021 в 20:20

Смотрите курс ООП, там это будет

zick 25.09.2021 в 15:16

Как искать по шаблону? Куда вставлять LIKE если я хочу, к примеру, найти имена содержащие "ва". Уже во все места ставил этот LIKE...

$stm = $dbh->prepare("SELECT * FROM `users` WHERE name LIKE '%ва%' =:name ;");
$stm->bindValue("name", "?????????");
ivashkevich 26.09.2021 в 07:45
$stm = $dbh->prepare('SELECT * FROM `users` WHERE name LIKE :name ;');
$stm->bindValue('name', '%ва%');
Логические задачи с собеседований