Пишем на SQL без SQL! ► Урок по RedBeanPHP #1 ► Самая простая и мощная ORM для PHP! ► Основы
HTML-код
- Опубликовано: 6 авг 2024
- Ломаем систему с помощью ORM RedBeanPHP, работаем с базой данных без нужды изучать язык SQL!
Вы же знаете, что есть SQL и noSQL базы данных?
А что если ... работать с SQL без SQL? :)
То есть, работать с базой данных, при этом даже не зная синтаксиса языка SQL и специфики выбранной СУБД?
► Вы узнаете:
- Что такое ORM, в частности RedBean PHP и какие у неё требования
- Как проверить/сменить версию PHP
- Чем отличается utf8_general_ci от utf8mb4_general_ci
- Как смотреть логи запросов
- Как решить проблему с подвисанием запросов в Open Server
- Как подключиться к базе данных посредством RB
- Что такое PDO, в чём разница с mysqli_* и что такое бинды
- Конвенции в RedBeanPHP и обход некоторых
- Как производить CRUD операции в RedBeanPHP
- Индексы в MySQL
- Что такое режим заморозки в RB
- и некоторые другие полезные моменты.
► Таймкоды:
2:00 Проверяем/Меняем версию PHP
6:10 Качаем/Подключаем RedBeanPHP
8:40 Подключаемся к базе данных R::setup()
9:50 В чём разница между utf8_general_ci и utf8mb4_general_ci
11:45 Почему нужно прописывать IP в качестве хоста базы данных
14:45 Закрытие соединения с базой данных R::close()
15:10 Проверяем соединение с базой данных R::testConnection()
16:00 Выполняем произвольный SQL код R::exec()
20:20 Что такое CRUD
21:00 Создание записей R::dispense()
27:50 О режиме заморозки R::freeze()
30:45 Конвенция именования таблиц
32:20 Пишем обход конвенций именования таблиц R::ext()
34:00 Конвенция именования свойств бина
34:40 Конвенция автосоздания индексов
37:20 Загружаем записи R::load()
41:00 Загружаем сразу несколько записей R::loadAll()
42:30 Поиск записей R::find()
44:20 Генерируем бинд слоты R::genSlots()
46:40 Ищем только одну запись R::findOne()
47:25 Загружаем все записи сразу R::findAll()
48:10 Итерация по всем записям R::findCollection()
49:40 Ищем записи по значениям R::findLike()
51:30 Загружаем запись если есть, создаем и загружаем если нет R::findOrCreate()
53:15 Считаем количество записей R::count()
54:35 Обновляем данные в записях
59:00 Удаляем записи из таблиц
1:00:18 Вайпаем данные таблиц (очищаем таблицы) R::wipe()
1:00:47 Очищаем всю базу данных R::nuke()
1:01:50 Что будем в следующих уроках?
►►► Второй канал Хауди, подпишись ;)
vk.cc/5lPADD
Человеческие цены на игры Steam и рандомы только тут - bit.ly/SteamAlmostFreeGames
Хочешь зарабатывать на своих видео в RUclips?
Подключайся! - youpartnerwsp.com/join?23195
#Ссылки из видео:
1) Индексы в MySql: vk.cc/6RTcqX
► Жми красную кнопку "Подписаться" под видео :)
► Есть вопрос? - Задай его лично мне в наших группах!
===
► Наша группа ВКОНТАКТЕ - howdyho_net
► Наш Twitter - howdyho_net
#Реквизиты для донатства | Поддержи канал!
Z252920168434
R250434217196
Музыкальный трек предоставлен RUclips Audio Library.
Вторая часть: ruclips.net/video/iU8zlbkpwyo/видео.html
а как тут работать с 2 базами ?
как изменить первичный ключ при автоматическом создании таблицы ?
Хауди Хо™ - Просто о мире IT! Как создавать связь 1к1
Чувак, этот видос выложили на официальный сайт RedBeanPHP. redbeanphp.com/index.php?p=/videos
На их сайте всё есть
Друг, наткнулся на твой канал недавно случайно...искал уроки СиКьюЭль и ВБА для Экселя...просмотрел несколько твоих видосов иии...блядь, они вдохновляют. Я вообще не программист и далёк от этого, но дико респектую тебе. Мотивируешь прям своей историей и видео своими. Ах да, первый раз в жизни я подписался на канал предварительно не смотря ни одного видоса, а чисто из - за визуала оформления канала и превьюшных картинок с видео. Удачи тебе, друг. Просто хотелось написать. Ну и подписчиков побольше само собой.
хаха) я тоже VBA смотрел, а то резюме создал и задание прислали, ну думаю чеб не сделать.. в итоге забил, ладно само программирование на VB, но буква A создает геморой, из экселя в ворд вывод сделать, да еще в таблицу, да еще с сортировкой, а при этом язык древний, уроков и инфы мало, ну его нах, в итоге резюме убрал на стажера программиста и решил php учить и конкретно на php идти)
Эх!)) Я просил в лс год назад где-то снять видосик на эту тему)))) МЕЧТЫ СБЫВАЮТСЯ!)))) СПАСИБО! Сейчас буду сидеть смотреть с большим удовольствием!))
За таймкоды отдельное спасибо)
неужто годнота наконец-то подъехала
Огромное спасибо!Все, как всегда, на высоте!
Рад помочь!)
Крутой переход со "Снимай и монтируй")
Спасибо за урок,все как всегда на высоте)
Рад помочь!)
спасибо за видео! вдохновляет ! подача информации для новичков просто на уровне)
Рад помочь!)
Отличный урок! Спасибо!
Рад помочь!)
Отлично. Давно искал уроки по этой ORM. Спасибо огромное!!
Рад помочь!)
О, ура, дождался!
Спасибо за уроки. Очень полезный канал .
Рад помочь!)
Продолжай в том же духе бро!
Вашпе класно :) Спасибо тебе.
Спасибо большое за такую инфу!
Рад помочь!)
Спасибо за урок. Полезная штука однако
Сделай уроки по php и mysql. Как выводить данные сразу из нескольких таблиц. Проверки, сравнения, математические функции. Вообщем как сделать CRM-систему учета заказов с нуля. Я думаю народу будет очень интересно!))
Отличный урок!
Хотелось бы добавить что в методах find, findAll можно помимо WHERE и ORDER BY еще использовать LIMIT
Верно
очень полезные уроки!!! больше RedBeanPHP !!!
очень интересно если в RedBeanPHP функции отправки писем или загрузки файлов с согранением имени в базу
Огромное спасибо!!!!
Хауди красавчик, посмотрел урок по созданию авторизаций регистраций сразу подписался, сними видео по фреймворкам в пхп в частности yii2 благодарю)
В будущем будет
Тоесть методом dispense
$task = $_POST['msg'];
$sql = R::dispense('message');
$sql->msg= $msg;
$sql->time = date('H:i:s');
R::store($sql);
SQL иньекции не будет?
так как я попробовал в окошке вписать 123; TRUNCATE 'message';
и он просто занёс как текст - 123; TRUNCATE 'message';
Спасибо за таймкоды
Хауди, подскажи как решить проблему Идентификатор RedBeanPHP чувствителен к регистру, у меня в таблицы не id а idletter, как сделать что бы RedBeanPHP работал с Идентификатором например idletter, переименовать не можно так как базу используют в другом проекте. Жду ответа , Спасибо Хауди Братан;)
Привет, не копался в документации редбина, может там есть, но спрошу тут. Когда мы просто работаем на вставку чего-либо в таблицу, стандартным методом:
$user = dispense('users');
$user->name = 'Jon'
R::store($user);
По такой схеме редбин использует технологию подготовленных запросов? Инъекции тут не пройдут?
Черт возьми удобно!!!
А то)
Главное не забывать о старом добром SQL, хотя, в следующих уроках я об этом обязательно расскажу.
а в 2018 году redbeanphp еще в силе на продакшене?
у меня в 1 из скриптов удалять можно только с выключенным фризом, я не понимаю почему, обьясни
Для новой версии RedBeanа другой синтаксис для sql запросов
Мистер ,Хауди ХО,если вы разбираетесь в реактивном програмировании,то хотелось бы увидеть от вас урок по ReactJS.Спасибо за то что прочитали комент.
можете оставлять ссылки на уроки, информацию из которых вы используете в видео
как обновить данные через страницу редактирования профиля? через exec лучше?
После получения первого ЗП обязательно задоначу Хауди)
хомяк в тему, неожиданно! ржал 5 мин.
как изменить первичный ключ при автоматическом создании таблицы ?
как можно использовать Redbean в MVC паттерне при подключении через require и R::setup() выдает ошибку. нужна с namespace использовать но как?
Почему при вызове метода count, у меня возвращаются пользователи только до 9 I'd, а дальше игнорирует?
куда писать название таблицы или как оно узнает в какую таблицу иму записываться
$books = R::find( 'book', ' title LIKE ? ', [ 'Learn to%' ] ); как в место (Learn to) подставить свое значение которое получается из переменной? Я не могу этого понять и найти этого на сайте.
Я так понимаю никакой конвертации не происходит $User->export(); Мы просто указываем на существующий метод, смотрим через echo что там, а там наш изначально наш массив. echo говорит что массив, но не описывает т.к. и не было запроса что конкретно из массива нам надо. Мы обращаемся к функции print_r() и говорим, что нам надо всё что там есть и заменяем бесь бин на свой массив
Работаю с postgresql, подключается к базе, ошибок никаких не выдаёт, а в базу ничего не пишет:(
красава
Привет Хауди. Очень мощный ORM есть в Laravel. Не планируется краткий скринкаст по Laravel 5? Заранее спасибо.
Eloquent, да, знаю.
Пока не планируется, в будущем возможно.
Хауди, у меня проблема. После того как полгода назад узнал про Redbean PHP, не могу себя работать и учить стандартный SQL. Стоит ли его учить, или RedbeanPHP можно использовать на постоянку?
Попробуй.
Но, не забывай про SQL.
Ты всё время указываешь id 1,2,3
Но как изменить, например имя пользователя в Сессии?
Я зашел под своим логином, и хочу сменить имя. Как это сделать?
В твоих способах, только фиксированному id можно менять имя и удалять к стати тоже.
Измени имя пользователя в бд, через R::exec и удали у пользователя сессию. После того, как пользователь войдёт, он увидит новое имя(не факт что это сработает, но попробуй)
Братцы помогите, смотрел-смотрел, пробовал-пробовал.
Ничего не выходит. Не понимаю
Какой запрос нужно отправить, что-бы найти пользователя по значению переменой $id_user = int
В базе со структурой id, user_id, points
А далее в переменную $points = Int внести значение из столбца points, приналежащую строке user_id со значением $id_user
Как сделать так чтобы выводились все записи ?
$users = R::loadAll('servers', array(1,2,3)); - чтобы не записывать в array
$users = R::loadAll('servers');
Почему немогу установить rbphp? Там пишет что у меня нет программы для открытия
Как вывести через findall только 3 последних бина?
Ребзя, подскажите.
$skill = R::dispense('skills');
$skill->type = $data['type'];
R::store($skill);
$data['type']- одномерный массив, редбин не хочет значения в таблицу добавлять, как выйти из ситуации?
Могу помочь
Спасибо, стандартная инфа суховата. Что за плагин для PHP Storm который при вызове функции серым шрифтом подсказывает ее аргументы (прямо в скобках)?
Это не плагин, стандартная функция последней версии phpStorm.
Странно, название таблицы с _ работает, а с заглавными буквами нет...
query sets и orm разные вещи?
Хауди, делаешь отличные уроки, с твоей помощью многому научился, спасибо. Сейчас делаю видео про мотивацию на своем канале и о том, как начать программировать
Рад помочь!)
Круто, так держать ;)
Хорошее видео, жаль что все мелко
Привет! Так третий урок записан или так и не появился?
подскажите кто у меня такая трабла, когда хочу обновить базу он у меня просто новую запись вводит в таблицу
$product = R::load('product', 'id = ?', array($data['id']));
$product->name = $data['category'];
$product->manufacturer = $data['man'];
$product->model = $data['model'];
$product->description = $data['desription'];
$product->price = $data['price'];
$product->image = $data['image'];
R::store($product);
со вторым методом тоже самое
Помогите!!! Браузеры не понимают код из RedBeanPHP. Пишут Parse error: syntax error, unexpected ':', expecting ',' or ')'. Как я понял оно видит ошибку в части где 'R::'. Что делать?
код
Мог бы ты снять видео как подключить двухфакторную авторизацию
lazer361 на другом канале есть уже
Не доработанная
Здравствуйте я хочу подключить второй БД в redbeanphp как это сделать?
redbeanphp.com/manual3_0/index.php?p=/manual3_0/multiple_databases
Если сайт уже запущен и работает с mysqli, можно добавить новые приблуды на RedBeanPHP?
Нет
как выполнить вот такой запрос mysql_query("SET TIME_ZONE='+3:00'"); ?
R::exec()
Ку, когда след видео из серии клондайк. Удачи
Уже на канале
Хауди нужна помощь на 38:00 ты указал id, как указать id аккаунта на котором вошел пользователь?
L. games могу помочь!
L. games Тебе какие данные надо вывести? Типо id, login или имя
Помогите! Вот код:
require 'rb.php';
R::setup ( dsn: 'mysql:host=127.0.0.1;dbname=rb_test', username: 'root', password:" ''); - вот ты скобку забыл закрыть
убери dsn:, username: и password:. т. к. у него в IDE это просто подсказки.
База H2 в качестве баз по умолчанию, вроде, не описана. А как ее можно подключить, чтобы пробовать, для начала, на неболших и простых данных?
И еще.
По моему, советовать обязательное прописывание ip адресов не совсем правильная идея. Лучше, все-же, делать через разыменование. И, конечно, разобраться в причинах зависания.
А то так можно дойти, вообще, до программирования на ассемблере.
Насчет того, что при подключении к базе данных, на самом деле, не происходит подключение "и это классно".
По моему, не совсем классно. Что будет, если форма заполенеа и данные с нее надо вносить в базу, а подключения, на самом деле, не произошло? Плохо.
Поэтому, в любом случае, правильным тоном будет проверка подключения. То есть, все-же, делать if testConnection()
Дальше.
То, что многие вещи RedBeanPHP берет на себя и делает, как по умолчанию, тоже не есть гуд. Например, добавляет несуществующую колонку и заполняет ее. А как быть, если колонка должна быть NOT NULL? По все предыдущим записям получим что?
Поэтому, на мой взгляд, правильнее было бы создавать таблицы и объекты через интерфейс. Особенно, для новичков. Там сразу идет контроль на уровне СУБД.
Дальше
Такой механизм, как создание и использование View. Возможно, надо было его упомянуть, при описании операций. Очень удобная штука. Ведь не секрет, что запросы, как правило, не только к одной таблице делаются. В RedBeanPHP такая возможность существует? Тогда, может быть, в следующих уроках это рассмотреть?
По поводу записи урока.
Очень качественное представление. И стиль изложения.
Огромное спасибо.
LoadALL не понял!! Второй аргумент - массив [1,2,3], где 1,2,3 - это что?!! id? автоматически по id ищет???
Да, поэтому это не слишком популярная функция)
Какой лучше выбрать первый язык? C#, C++ или Java(Из представленных)
Считая чем ты хочеш заниматся.Java для разработок под андроид,а С# и С++ для программ(С# проще).
oleksandr tatarinov, тогда где больше востребованность java или C#
И там и здесь. Изучи хотя бы, один язык на вкус и второй ты выучишь намного легче...
А зачем он на этапе добавления записи (когда все требуемые поля уже созданы) делает несколько запросов describe? Такое ощущение, что на каждое поле идет по запросу..
Не верит что нет полей
Пора создавать новую серию, туда чудесным образом вписывается недавний матч Украина - Турция в Харькове
Всё переписано и проверено из видео, но выдаёт вот такую вот ошибку:
Parse error: syntax error, unexpected ':', expecting ',' or ')'
Нащёл на оф. странице решение. Не нужно прописывать "typeOrBeanArray:"
лол, это название аргумента в функции, их добавляет IDE(PhpStorm) с недавнего обновления, они пишутся на сером фоне и выделяются из общего стиля
После того как нажала зарегаться(ошибок в коде вроде нет что не так):
Fatal error: Uncaught RedBeanPHP\RedException: Invalid Bean property: property in W:\domains\localhost\libs
b.php:7131 Stack trace: #0 W:\domains\localhost\libs
b.php(7632): RedBeanPHP\Repository->check(Object(RedBeanPHP\OODBBean)) #1 W:\domains\localhost\libs
b.php(7233): RedBeanPHP\Repository\Fluid->storeBean(Object(RedBeanPHP\OODBBean)) #2 W:\domains\localhost\libs
b.php(8310): RedBeanPHP\Repository->store(Object(RedBeanPHP\OODBBean)) #3 W:\domains\localhost\libs
b.php(10627): RedBeanPHP\OODB->store(Object(RedBeanPHP\OODBBean)) #4 W:\domains\localhost\signup.php(63): RedBeanPHP\Facade::store(Object(RedBeanPHP\OODBBean)) #5 {main} thrown in W:\domains\localhost\libs
b.php on line 7131
Спасибо за урок, подскажите как вывести все id, а не вводить 1,2,3 и тд: $users = R::loadAll( 'user', array(1,2,3 );
R::findAll('user')
Спасибо.
музыка на 59:25 ?
О великие ГУРУ весь мозг сломал
Как присвоить имя таблицы через него
пытался так
$test = R::dispense('test');
$test->data = $today;
$test->$test = $import['namepac'];
$test = R::dispense('test');
$test->data = $today;
$test->{$test} = $import['namepac'];
так и не вышло задать имя с отбора
решил по другому
R::exec('alter table test change name '.$test.' text'); и так тоже ничего
если вписать
R::exec('alter table transl change name BLABLABLA text'); всё отлично работает
помогите что-то я в ступоре
Чет ты странное написал что-то мэн)
$test= R::dispense('test');
$test->data = $today;
R::store($test);
в этом случае создастся таблица с именем ''test' где в столбце с названием 'data' будет значение переменной $today
composer?
r::find возвращает только одну и последнюю запись из БД.. WTF как исправить?
findAll
@@HowdyhoNet Такая же проблема как и автора вопроса. прости, не могу понять. Мне нужно получить несколько бинов по строке. я пишу запрос
// в таблице jobs допустим 10 записей, мне нужно выбрать 3 (три записи) по id_jobs
$data=$_POST; //значения id_jobs , например 1,2,3 (проверял все есть.)
$listname = R::find('jobs','id_jobs IN('.R::genSlots($data['check_name']).')',$data['check_name']);
// выдает бин только одной записи! genSlots генерирует ?,?,? (проверял)
Вопрос - почему только один бин????
Как удалить строку в БД зная username (String) но не зная id? username уникальный.
почему ошибка
А как по нагрузке на сервер?
Так же как и pdo
Ошибка, похоже в том, что в поле password одна двойная кавычка вместо двух одинарных
хауди, ты собираешся вылаживать видео на второй канал?
вообще-то findCollection прекрасно принимает параметр where
Херня какая то, ошибку выдает , все также
Parse error: syntax error, unexpected ':', expecting ',' or ')' in C:\OpenServer\domains\bean\index.php on line 4
require 'rb/rb.php';
R::setup ( dsn: 'mysql:host=127.0.0.1;dbname=bea_bas', username: 'root', password:" '');
if(!R::testConnection() )
{
exit("Подключения нет");
}
R::close();
dbname='bea_bas' - ты забыл поставить кавычку в начале.
R::setup ( dsn: 'mysql:host=127.0.0.1; dbname='bea_bas', username: 'root', password:" '');
if(!R::testConnection() )
{
exit("Подключения нет");
}
-------------------------
Всё теперь будет работать!
А по Django будут уроки? спасибо)
В будущем будут
Я уже в петлю залезть хочу, 3 ночь не могу найти причину синтаксической ошибки, уже все инструкции перечитал, и уже как только не извращался, ну не работает код, функция R::loadALL, просто жопа горит столько времени , сил, в пустую, все равно не добился ничего, дает ошибку дрянь.
Код:
Ошибка: Parse error: syntax error, unexpected ':', expecting ',' or ')' in F:\openserw\OSPanel\domains\box\testm.php on line 6
с таблицами БД все 250 раз проверенно. ПАМАГИТЕ!!!!!
вот правильный код
подучи как правильно использовать цикл foreach
а первая ошибка была в type "$user = R::loadAll(type:'users', array(1,2,3));", не надо писать type перед users, на видео в ide это является встроенной подсказкой, а не кодом как у тебя
Uncaught [3D000] - SQLSTATE[3D000] ошибка написал точ-в-точь как ты
Я так нихрена и не понял, нафиг он нужен, всё тоже самое делается обычным способом с такой же скоростью
40:15
вот вообще не вдупляю зачем писать 3й аргумент в find если все махинации можно проводить со 2м аргументом. age>27. зачем вводить знак вопроса и создавать 3й запрос. age>?, array(27). ответ тот же будет. И вообще устанавливать порядок по возрасту и так работает 'age>27 order by age'. Нафига также findAll если всё просто find работает.
Кто из 20121
очень тяжело смотреть в 1980 с телефона
музыка на фоне местами приятней стала)
Спасибо за туториал очень полезно, не раз еще вернусь к нему!
нихера не видно код!!
Качество повысь до 720 или 1080
@@HowdyhoNet У меня таже проблема, но я не могу себе позволить этот формат из-за технических причин своего ПК!
@@HowdyhoNet Если смотреть на хреновых телефонах то максимум 480
фасоль а не горох
Перешел по ссылке про индексы... Про селективность читаю, мол gender выдает под 6000 записей, а age только под 200, это с какого перепуга разных полов аж за 6000 бывает? Иди пример тупой, или не объяснено что строки не сравнивают.. фейспалм
В двух словах, зачем тогда в принципе учить и помнить sql?)
Чтобы писать оптимизированные запросы и понимать как они устроены.
О Боги, говнокодище редкий ваш редбин.
И не стыдно людям такое втюхивать?
И это видео уже состоянием на 2017 год. Когда уже были нормальные инструменты. А не вот это вот...
например?
Вот и по этому я использую SQL запросы
Если у Вас Parse error: syntax error, unexpected ':'
Решение:
Ребята, этот Хауди - реально не рассчитывает на то что вы начинающие. Ему вообще по фиг на вас. Короче его видео можно смотреть только тем кто уже Знает синтаксис RedBeanPHP )))
Вы спросите - так а зачем человеку, который уже знает проходить урок хауди?
Это вопрос к автору ролика))
если у Вас выдает Syntax Error ':' - это потому что у него в PHP storm установлены подсказки и этот грамотей про это в ролике ничего не сказал)
реальный код такой:
R::setup('mysql:host=127.0.0.1;dbname=rb_test', 'root', '');
не нужно dns password login - ну вот почему автор такой ... (тут мат)? неужели нельзя было об этом сказать или приложить рабочий код?
Люди должны тратить час или полтора чтобы просто где-то на форуме вычитать.
Эм... я понял это и без подсказок автора. Нужно думать а не тупо списывать код с экрана.
Боже, Хауди, подтяни произношение, когда слышу некоторые слова от тебя, плохо становится)
Create - [криЭйт]
Delete - [дэлИт]
Рекомендую по возможности пользоваться гугл переводчиком, гугл баба правильно читает английский.
По теме:
Как раз перешел к БД, а ORM в Kohana не работает с PDO и в целом не очень.
Предется подключать стороннюю, вроде RedBean популярна.
"require 'rb/rb.php';
Undefined type 'R'.intelephense(1009). "
как от етого избавится?!
А если в таблице нет поля ид редбин ругается,не всегда нужен ид,и редбин нн хочет блобы загружать,пишет типо недопустимые символы
Если используется движок InnoDB, то всегда.
Иначе, если ты его явно не создаешь, InnoDB создаёт его скрытно.
Хауди Хо™ - Просто о мире IT!,а по поводу блобов ?