 |

12.06.2019, 21:58
|
|
Познающий
Регистрация: 31.12.2018
Сообщений: 61
С нами:
3877784
Репутация:
18
|
|
Размусоленное начало для всех кто не понимает зачем это.
PDO(PHP Data Objects) - это прослойка, которая предлагает универсальный способ работы с несколькими базами данных. Кратко и понятно - PDO заботится о ваших запросах, если вы правильно их напишите.
и бла-бла-бла...
Так сказать к ДЕЛУ
Создаем любой файл в моем случае "config.php", можно и использовать массив прямо в классе разницы зеро.
Содержимое файла:
PHP:
Код:
return
array
(
'host'
=
>
"localhost"
,
'user'
=
>
"username"
,
// имя пользователя базы
'name'
=
>
"basename"
,
// имя базы
'passowrd'
=
>
"userpassowd"
,
// пароль от пользователя базы
)
;
Дальше нужно создать отдельный файл для класса, что бы его подключать только в тех местах где нужно(просто так красиво).
Назову файл "base.php", файл прикреплю, может кому-то нужен.
PHP:
Код:
class
Db
{
protected
$db
;
public
function
__construct
(
)
{
$config
=
require
'config.php'
;
// подключаем наш файл с конфигом
$this
-
>
db
=
new
PDO
(
'mysql:host='
.
$config
[
'host'
]
.
';dbname='
.
$config
[
'name'
]
.
''
,
$config
[
'user'
]
,
$config
[
'password'
]
)
;
// производим подключение к базе
$this
-
>
db
-
>
exec
(
"set names utf8"
)
;
// кодируем в utf8, если вы не используете U
}
public
function
query
(
$sql
,
$params
=
[
]
)
{
$stmt
=
$this
-
>
db
-
>
prepare
(
$sql
)
;
if
(
!
empty
(
$params
)
)
{
foreach
(
$params
as
$key
=
>
$val
)
{
if
(
is_int
(
$val
)
)
{
$type
=
PDO
:
:
PARAM_INT
;
}
else
{
$type
=
PDO
:
:
PARAM_STR
;
}
$stmt
-
>
bindValue
(
':'
.
$key
,
$val
,
$type
)
;
}
}
$stmt
-
>
execute
(
)
;
return
$stmt
;
}
// в данном паблике можно не разбираться, он производит общение с базой.
public
function
row
(
$sql
,
$params
=
[
]
)
{
$result
=
$this
-
>
query
(
$sql
,
$params
)
;
return
$result
-
>
fetchAll
(
PDO
:
:
FETCH_ASSOC
)
;
}
// собственно получает все строки следуя вашему запросу.
public
function
column
(
$sql
,
$params
=
[
]
)
{
$result
=
$this
-
>
query
(
$sql
,
$params
)
;
return
$result
-
>
fetchColumn
(
)
;
}
// одна строка один столбец
public
function
lastInsertId
(
)
{
return
$this
-
>
db
-
>
lastInsertId
(
)
;
}
// посдледний занесенный ID в таблицу
public
function
numrows
(
$sql
,
$params
=
[
]
)
{
$result
=
$this
-
>
query
(
$sql
,
$params
)
;
return
$result
-
>
rowCount
(
)
;
}
// кол-во записей в таблице
}
Примеры запросов и подключение файла(кто-то не умеет? ЛОЛ)
Допустим у нас есть таблица example в ней 3 записи: 1 test | 2 vitya | 3 oleg
Колонки 2: id и name
PHP:
Код:
require_once
(
"base.php"
)
;
// единоразово подключаем файл base.php(файл с классом)
$bd
=
new
Db
;
// вызываем класс, теперь мы можем с ним работать, все функции вызываются через ->.
$row
=
$bd
-
>
column
(
"SELECT `id` FROM `example`"
)
;
var_dump
(
$row
)
;
/*
Получим string(1) "1". т.к. отдает одну строку и один столбец, т.е. строку.
*/
$row
=
$bd
-
>
row
(
"SELECT `id` FROM `example`"
)
;
/*
Ответ от базы:
array(3) {
[0]=> array(1) {
["id"]=> string(1) "1"
}
[1]=> array(1) {
["id"]=> string(1) "2"
}
[2]=> array(1) {
["id"]=> string(1) "3"
}
}
Получаем три строки со столбцом id. Т.к. у нас 3 записи.
Впринципе и так далее. Для работы с базой в более расширенном режиме чем просто получение данных поспользуемся "query"
*/
$array
=
[
'name'
=
>
"vitek"
;
]
;
$bd
-
>
row
(
"ISERT INTO `example` (`name`) VALUES (:name)"
,
$array
)
;
// добавит запись с id 4 и name vitek
echo
$bd
-
>
lastInsertId
(
)
;
// вернет 4
Код:
// логично, что numrows вернет тоже число 4.
Если кто-то не понял array(); == [];
Что обычно в конце не знаю, но мне кажется что это должны использовать все, задавайте вопросы, отвечу.[/SIZE]
|
|
|

12.06.2019, 21:59
|
|
Постоянный
Регистрация: 02.12.2017
Сообщений: 865
С нами:
4444964
Репутация:
163
|
|
Браво Какосу
|
|
|

12.06.2019, 23:40
|
|
Познающий
Регистрация: 31.12.2018
Сообщений: 61
С нами:
3877784
Репутация:
18
|
|
Сообщение от HellsCoder
Хорошая статья, но хочется отметить несколько вещей. Первая - это совершенно непонятный класс base.php, который к тому же, почти нихуя не делает, и лишь представляет обертку над стандартными методами(с lastInsertId вообще до слез, спасибо - Вы сделали мой день).
Вторая: хочу еще раз отметить что ООП - не лучшая парадигма для маленьких проектов. Ранее на Хабре уже была статья на эту тему, рекомендую к прочтению. Имхо - с автором статьи на хабре, по поводу ООП, я не совсем согласен, для больших проектов - ООП незаменимая парадигма
При малом количестве мозгов ты можешь переписать сам, на привычный фп. Не буду говорить кто фпшеры, ну вы сами поняли да
Сообщение от HellsCoder
(с lastInsertId вообще до слез, спасибо - Вы сделали мой день).
сверху написано, что переменная приватная. Что не так?
Сообщение от HellsCoder
Первая - это совершенно непонятный класс base.php, который к тому же, почти нихуя не делает, и лишь представляет обертку над стандартными методами
Сам же писал в другой статье, что это "сложно" вот я сделал тебе "просто"
Не осилил ООП - обосрал, логично.
|
|
|

13.06.2019, 00:04
|
|
Постоянный
Регистрация: 04.09.2016
Сообщений: 393
С нами:
5098989
Репутация:
108
|
|
Процедурка ван лав
|
|
|

13.06.2019, 00:57
|
|
Познающий
Регистрация: 31.12.2018
Сообщений: 61
С нами:
3877784
Репутация:
18
|
|
Сообщение от HellsCoder
Так ты его еще и говоришь подключать везде. Я просто О ХУ ЕЛ
что ты так всполыхнул, смех, где я написал что это для проекта в один файл? Или ты хочешь что бы в большом проекте использовали твою функцию которую тоже можно прям точь в точь нагуглить?
Сам же скинул ссылку на пост, где пишут, что в крупных проектах все равно ФП либо ООП. Одно и тоже.
|
|
|

13.06.2019, 01:07
|
|
Познающий
Регистрация: 31.12.2018
Сообщений: 61
С нами:
3877784
Репутация:
18
|
|
Сообщение от Frapsy
Процедурка ван лав
Каждому свое, я показал ПДО с "элементами ООП", фулл ООП это не назвать. Как же вы будите использовать ПДО вам решать.
Сообщение от HellsCoder
Начнем с того что в большом проекте вообще зашкварно юзать PHP без каких нибудь компиляторов или мощной системы кеширования, потому что в PHP по сути даже GC то и нет, о чем там разговаривать. Уж молчу что асинхронность добавили только недавно. Экземпляр коннекта должен создаваться один раз, а при каждом конструкте - просто запрашиваться. А у тебя создается новый коннект к базе при каждом конструкте
Если брать нагруженные проекты такие как - ВК. То писать нужно исключительно на web c++. Для менее загруженных питон, еще менее PHP - он себя более естественно проявляет. Дальше можно посмотреть на JS, лол. (не гори я рофлю но два первых пункта не рофл.)
|
|
|

13.06.2019, 01:09
|
|
Постоянный
Регистрация: 11.06.2018
Сообщений: 870
С нами:
4170300
Репутация:
118
|
|
Охуенно читать то, как кидаются говном понимающие люди. А ты в этом нихуя не понимаешь. Идеально
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|