|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
Добрый вечер. Хотела устроиться стажером. Выслала пример кода PHP+MySQL. Добрый дядечка сказал, что все плохо и посоветовал написать сюда, чтобы покритиковали. Пишу. Очень хочу понять что не так. <?php echo "</p>"; } elseif ($status == "Ввод") { $message = mysqli_real_escape_string($connection, $message); $query = mysqli_prepare($connection, 'SELECT * FROM my_blog ' . 'WHERE title = ? AND message = ?'); $query->bind_param('ss', $title, $message); $query->execute(); $row = $query->num_rows; $query->close(); if (($row) == 0) { $query = mysqli_prepare($connection, 'INSERT IGNORE ' . 'INTO my_rubric VALUES (NULL,?)'); $query->bind_param('s', $rubric); $query->execute(); $query = mysqli_prepare($connection, 'INSERT IGNORE ' . 'INTO rubric_small VALUES (NULL,?,(SELECT ' . 'id FROM my_rubric WHERE rubric_name = ?))'); $query->bind_param('ss', $link, $rubric); $query->execute(); $query = mysqli_prepare($connection, 'INSERT INTO ' . 'my_blog VALUES (NULL, now(),?,?, (SELECT id FROM ' . 'my_rubric WHERE rubric_name = ?), (SELECT ' . 'id FROM rubric_small WHERE rubric_small_name = ?))'); $query->bind_param('ssss', $title, $message, $rubric, $link); $query->execute(); $query->close(); $connection->close(); } else { echo "Данное сообщение уже есть в базе!"; } $status = ""; $title = ""; $message = ""; $rubric = ""; $link = ""; } ?> ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 23:21 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
gos-yuliya, Тут подфорум по MySQL, поэтому публикуйте, пожалуйста, код для MySQL. Т.е. DDL таблиц, интересующие Вас запросы, их логику и, собственно, задачу. И для кода есть специальный тег SRC, используйте его, пожалуйста. В текущем виде, даже если это я перенесу в подформ по PHP, вряд ли там обрадуются. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 23:38 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
Читаемость текста запросов просто ужасна. Не обязательно вытягивать их в одну строчку для мускуля и уж совсем не надо дербанить как попало для кода. Можно просто написать аккуратно в несколько строк, используя отступы для выделения структурных блоков, типа так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
gos-yuliya $query = mysqli_prepare($connection, 'SELECT * FROM my_blog ' . 'WHERE title = ? AND message = ?'); $query->bind_param('ss', $title, $message); $query->execute(); $row = $query->num_rows; $query->close(); Впрочем, если стоить задача проверки уникальности, а $message имеет преимущественно размерчик более нескольких десятков или сотен байт, тогда, возможно, для обеспечения/проверки уникальности проще использовать его хеш с гарантировано небольшой длиной. Вариант с INSERT IGNORE и https://www.php.net/manual/ru/mysqli-stmt.affected-rows.php для такого случая тоже вполне ничего. gos-yuliya $query = mysqli_prepare($connection, 'INSERT IGNORE ' . 'INTO my_rubric VALUES (NULL,?)'); $query->bind_param('s', $rubric); $query->execute(); $query = mysqli_prepare($connection, 'INSERT IGNORE ' . 'INTO rubric_small VALUES (NULL,?,(SELECT ' . 'id FROM my_rubric WHERE rubric_name = ?))'); $query->bind_param('ss', $link, $rubric); $query->execute(); $query = mysqli_prepare($connection, 'INSERT INTO ' . 'my_blog VALUES (NULL, now(),?,?, (SELECT id FROM ' . 'my_rubric WHERE rubric_name = ?), (SELECT ' . 'id FROM rubric_small WHERE rubric_small_name = ?))'); miksoft вряд ли там обрадуются ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 00:39 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
gos-yuliya, Раз тут форум по mySQL, поговорим про запросы. 1) SELECT со звездочкой: Код: sql 1.
Звездочку в SELECT надо использовать чуть менее чем никогда. 2) Я предполагаю, что вы используете в запросе сравнение текстовых полей с текстовыми значениями, чтобы получить ID: Код: sql 1. 2. 3.
Я не знаю, как там у PHP-шников принято, но вообще ID записи у вас уже должен быть к моменту вставки. То, что вы получаете ID, сравнивая текстовые поля, пусть даже они у вас проиндексированы, плохой стиль. Если вы подобную технику перенесете на что-то более серьезное и масштабное, то рискуете получить отключение вашего сервера БД за превышение отпущенного лимита процессорного времени. 3) То есть исходя из п.2 у вас архитектурная ошибка. Как ваш код отреагирует на то, что названия рубрик и заголовков (или что у вас там? в принципе, неважно) поменяются? Что если их отредактирует пользователь, модератор или админ в момент выполнения кода? Если движком пользуются полтора человека, то вероятность этого низка. А если 1000 и практически одновременно? Кто-то потеряет свои данные? Появятся несогласованные записи? Что-нибудь еще? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 00:48 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
Забыл добавить: 4) Первым запросом вы определяете количество строк. Для этого достаточно запроса вида Код: sql 1.
сервер вам вернет это значение сам, не надо тащить на клиента все (!) поля и записи. Кстати, в этом запросе тоже сравнение текстовых значений. К сожалению, добрый дядечка прав. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 01:05 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
Gluck99 но вообще ID записи у вас уже должен быть к моменту вставки. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 01:38 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
miksoft Gluck99 но вообще ID записи у вас уже должен быть к моменту вставки. 2) У автора вставка в другую таблицу происходит, а не в ту же самую. Там обычное one-to-many. Сообщения (message) входят в рубрику (rubric). Как-то так. По идее, там должен быть еще заголовок (title) в отдельной таблице между ними. А у автора он по ходу просто в текстовом поле сообщения, т.е. повторяется от записи к записи. 8-) Впрочем, не знаю, как там должно быть, может так и правильно, если title - это заголовок конкретного сообщения, а не топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 02:08 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
gos-yuliya, Мешанина из вёрстки, логики работы и запросов. Самому не надоело копипастить все эти $query = $mysqli_prepare ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 04:34 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
miksoft, поняла, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 08:58 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
INSERT IGNORE INTO `rubric_small` VALUES ( NULL, ?, ( SELECT `id` FROM `my_rubric` WHERE `rubric_name` = ? Спасибо. Так действительно удобнее) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 09:05 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
Gluck99, спасибо. Что-то про Код: plsql 1.
я и забыла. Понимаю, что добрый дядечка прав, поэтому и добрый, поэтому и, следуя его совету, прошу критики кода здесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 09:15 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
crutchmaster, это не копипаст. Я изучаю теорию по книгам, если что-то не понятно, что читаю мануалы и ищу ответы на форумах и в блогах. Но, к сожалению информации так много и она настолько неструктурирована и разнообразна, что достойно изучать языки не получается. Я не оправдываюсь, а констатирую факт. Никогда не участвовала в такого рода форумах, но сейчас понимаю, что пришла к тому, что не понимаю. КАК? Как достойно писать код? Где брать информацию, которая не запутает, а поможет разобраться? Хотела даже попробовать позаниматься на Яндекс.Практикум, но, честно говоря, дорого, да и где гарантия, что там все будет ясно-понятно? Думала, что выходом будет устроиться стажером и посмотреть, как пишут код программисты со стажем, но и для этого нужен опыт)) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 09:29 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
vkle, не поняла, как можно спросить один раз. Это данные, которые внесены в поле ввода. Или надо спросить один раз вначале, присвоить переменной, а потом переменную вставлять в запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 09:38 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
gos-yuliya, Надо интерполировать то, как код будет выглядеть в перспективе. Достаточно просто представить, что в вашем примере не 36 строк, а 36000 и вам надо что-то там СЕЙЧАС, БЫСТРО найти и поправить. С опытом это, конечно, приходит, но лучше не иметь такой опыт. Женщины в работе обычно более пунктуальны и трудолюбивы, но тут надо научиться быть ленивым. Лень набирать лишний код - оформил его в функцию. Лень писать запросы прицепил орм (если уместно) или сделал конструктор запросов. Лень писать 10 раз одно и тоже, присобачил рефлексию. А сейчас научу плохому. Код: php 1. 2. 3. 4. 5. 6.
Вот это, например, можно оформить, как Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Ссылки https://www.php.net/manual/ru/functions.variable-functions.php https://www.php.net/manual/ru/functions.arguments.php ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 10:43 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
crutchmaster, поняла. Спасибо огромное. Мне так и сказал дядечка, что я не слишком ленива для программиста, пишу много кода, спрашивать у него что это значит, я не решилась))). Вы повторили его слова, да еще и разъяснили. Теперь хоть понятно в каком направлении двигаться. Буду исправлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 11:33 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
gos-yuliya, Вам надо заняться не тем, ЧТО писать, а КАК писать. Т.е. архитектурой. Мелкие ошибки можно исправить, SQL подучить, но если нет понимания принципиальных вещей, вы будете строить непригодные для жилья и работы небоскребы в виде сараев, как в примере выше. Прочитайте хотя бы это: Совершенный код , 2-е издание (мастер-класс), 2010 Стив Макконнелл И желательно "с карандашом". Ну и всё что касается проектирования кода вообще. Начиная от правильного нейминга и заканчивая паттернами. авторне слишком ленива для программистаЭто даже плюс в каком-то смысле, потому что такой талант можно конвертировать в хорошую производительность в будущем, если научитесь грамотно писать и сможете избежать "выгорания". ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 12:31 |
|
Нужна критика кода. MySQL+PHP
|
|||
---|---|---|---|
#18+
Gluck99, огромное спасибо за советы! Обязательно изучу эту книгу, понимания мне как раз таки и не хватает. Я и блог (часть кода которого выставила сюда для критики) начала писать именно из-за того, что в книгах есть много теории, примеров и т.д., но это все не связано воедино. Вот и решила создать проект (блог), по ходу разбирать что к чему "припаивать", и заодно он работает вместо карандаша. Все, что непонятно, что не запоминается, выносится туда в виде текста. Так информацию найти потом легче. Спасибо еще раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 15:02 |
|
|
start [/forum/topic.php?fid=47&fpage=21&tid=1828583]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 187ms |
0 / 0 |