HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 12.06.2019, 21:58
Ded Perded
Познающий
Регистрация: 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]
 
Ответить с цитированием

  #2  
Старый 12.06.2019, 21:59
Mirrorka
Постоянный
Регистрация: 02.12.2017
Сообщений: 865
С нами: 4444964

Репутация: 163


По умолчанию

Браво Какосу
 
Ответить с цитированием

  #3  
Старый 12.06.2019, 23:40
Ded Perded
Познающий
Регистрация: 31.12.2018
Сообщений: 61
С нами: 3877784

Репутация: 18
По умолчанию

Цитата:
Сообщение от HellsCoder  

Хорошая статья, но хочется отметить несколько вещей. Первая - это совершенно непонятный класс base.php, который к тому же, почти нихуя не делает, и лишь представляет обертку над стандартными методами(с lastInsertId вообще до слез, спасибо - Вы сделали мой день).
Вторая: хочу еще раз отметить что ООП - не лучшая парадигма для маленьких проектов. Ранее на Хабре уже была статья на эту тему, рекомендую к прочтению. Имхо - с автором статьи на хабре, по поводу ООП, я не совсем согласен, для больших проектов - ООП незаменимая парадигма
При малом количестве мозгов ты можешь переписать сам, на привычный фп. Не буду говорить кто фпшеры, ну вы сами поняли да

Цитата:
Сообщение от HellsCoder  

(с lastInsertId вообще до слез, спасибо - Вы сделали мой день).
сверху написано, что переменная приватная. Что не так?

Цитата:
Сообщение от HellsCoder  

Первая - это совершенно непонятный класс base.php, который к тому же, почти нихуя не делает, и лишь представляет обертку над стандартными методами
Сам же писал в другой статье, что это "сложно" вот я сделал тебе "просто"

Цитата:
Сообщение от HellsCoder  
Не осилил ООП - обосрал, логично.
 
Ответить с цитированием

  #4  
Старый 13.06.2019, 00:04
Frapsy
Постоянный
Регистрация: 04.09.2016
Сообщений: 393
С нами: 5098989

Репутация: 108
По умолчанию

Процедурка ван лав
 
Ответить с цитированием

  #5  
Старый 13.06.2019, 00:57
Ded Perded
Познающий
Регистрация: 31.12.2018
Сообщений: 61
С нами: 3877784

Репутация: 18
По умолчанию

Цитата:
Сообщение от HellsCoder  

Так ты его еще и говоришь подключать везде. Я просто О ХУ ЕЛ


что ты так всполыхнул, смех, где я написал что это для проекта в один файл? Или ты хочешь что бы в большом проекте использовали твою функцию которую тоже можно прям точь в точь нагуглить?

Сам же скинул ссылку на пост, где пишут, что в крупных проектах все равно ФП либо ООП. Одно и тоже.
 
Ответить с цитированием

  #6  
Старый 13.06.2019, 01:07
Ded Perded
Познающий
Регистрация: 31.12.2018
Сообщений: 61
С нами: 3877784

Репутация: 18
По умолчанию

Цитата:
Сообщение от Frapsy  

Процедурка ван лав
Каждому свое, я показал ПДО с "элементами ООП", фулл ООП это не назвать. Как же вы будите использовать ПДО вам решать.

Цитата:
Сообщение от HellsCoder  

Начнем с того что в большом проекте вообще зашкварно юзать PHP без каких нибудь компиляторов или мощной системы кеширования, потому что в PHP по сути даже GC то и нет, о чем там разговаривать. Уж молчу что асинхронность добавили только недавно. Экземпляр коннекта должен создаваться один раз, а при каждом конструкте - просто запрашиваться. А у тебя создается новый коннект к базе при каждом конструкте
Если брать нагруженные проекты такие как - ВК. То писать нужно исключительно на web c++. Для менее загруженных питон, еще менее PHP - он себя более естественно проявляет. Дальше можно посмотреть на JS, лол. (не гори я рофлю но два первых пункта не рофл.)
 
Ответить с цитированием

  #7  
Старый 13.06.2019, 01:09
Necessary)
Постоянный
Регистрация: 11.06.2018
Сообщений: 870
С нами: 4170300

Репутация: 118


По умолчанию

Охуенно читать то, как кидаются говном понимающие люди. А ты в этом нихуя не понимаешь. Идеально
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.