Есть проблема если допусти в адресной строке указать test.ru/guest.php?str=1
то проходит нормально всё
если указать в запросе одинарную кавычку test.ru/guest.php?str='
то вылазит ошибка
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-15,15' at line 1
Можно конечно проверять $_GET ['str'] на число например так is_int ($_GET ['str']) и это будет работать но может есть более правильный способ?
Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0','5'' at line 1 )
Что не так не пойму понятно что дело в переданных данных в LIMIT
Здравствуйте, буквально 2 день изучаю php..
Пока уровень новичек!
Вот у меня такой вопрос, вот я сделал подключени к БД mysql
Поддержу многих MYSQL устарел поэтому не стоит с ним заморачиватся.
Так-же если планируешь писать серьёзные скрипты то и MYSQLI не стоит особо изучать переходи и изучай PDO.
Тоже когда то начинал с MYSQL потом перешёл на MYSQLI, а теперь вот изучаю PDO так как для серьёзных проектов он больше подходит в нём больше возможностей.
Хотя может и я ошибаюсь может я просто не знаю всех тонкостей mysqli.
Я читал и пробывал я и написал что для меня fetchAll () именно для проверки пустоты данных не совсем удобна. Про цикл речь не идёт там её самое то применять для выборки отдельных полей.
Здравствуйте начал сейчас разбираться с PDO но при создании файла подключении к базе данных и запроса на выборку SELECT выходит фатальная ошибка, хотя вроде сделал всё правильно.
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in Z:\home\magazin_pdo.ru\www\111.php:7 Stack trace: #0 Z:\home\magazin_pdo.ru\www\111.php(7): PDO->query('SELECT * FROM `...') #1 {main} thrown in Z:\home\magazin_pdo.ru\www\111.php on line 7
Даже не знаю что не так. Подскажите пожалуйста где я ошибся?
gheka, Вы уверены, что в таблице заказов (order) поле id однозначно указывает именно на идентификатор счёта (invoices), а не заказа?
Логично предположить, что в таблице order есть поле с названием, похожим на `id_invoice`... или ещё какая-нить связь между заказом и счётом...
Да нет в таблице ORDER есть естественно свой ID это просто чисто пример, и переменные придуманы от балды.
И что? Все гвоздями прибиты к myisam?
Разделение в mysql подключаемых стораджей вообще удивительнейшая идея для субд, из-за которой архитектурно появляется куча костылей и многое работает крайне странно. Но переезд с myisam на innodb проходит обычно тихо и спокойно, особенно если специально не пытались отстрелить себе ногу. И позволяет обойти огромнейшее число граблей в поддержке и производительности.
Лично перетаскивал небольшой проект в ~50к строк PHP-кода (если в файлах считать - чуть меньше 500) с myisam на innodb - модификации кода не потребовалось. Вот обратно - да, будет больно. Но зачем?
Да нет, переделать таблицу из MYISAM в INNOBD это думаю не составит труда. Другое дело перейти на PDO так как давно использовал просто MYSQL и не давно только перешёл на MYSQLI весь скрипт перелопатил. Надо было сразу PDO смотреть, просто не привычный стиль и много чего уже не помню из него. Но почитав про PDO выходит, что он не намного отличается от MYSQLI но всё же больше развития происходит с ним. Так что буду подумаю о переходе на PDO
Спасибо я уже понял что обозначение функции и её запуск не имеет значения в PHP можно запускать функцию как до обозначения её так и после.
Суть моей проблемы как я сейчас понял именно в том что, у меня подобная функция которую я написал в примере в первом сообщении, запускалась из главного файла который прикреплён ко всем фалам моего скрипта. Так как мне необходимо, что бы данная функция запускалась постоянно с заходом нового посетителя на сайт, так как этой функцией обновлялись счета пользователей.
И происходило следующее если в какую ту миллисекунду заходят на сайт 2 посетителя, то функция SELECT на запуск функции срабатывает 2 раза.
И первый цикл не успевает закончится как начинается второй и получается что в базе данных в таблице INVOICES c поле STATE ещё не поменялось на 2 поэтому и получается, что SELECT иногда пропускает 2 раза ID с одним и тем же значением.
По этому я сейчас переделал запуск этой функции в CRON с запуском каждую минуту, там ей и место, почему сразу так не сделал не знаю.
Но у меня есть подобная функция это бронирования товара для покупателя, принцип тот же если одновременно 2 покупателя нажмут кнопку перейти к оплате то проверка на остаток товара может не сработать и получится что 2 покупателя забронируют больше товара чем есть в наличии. По этому без блокировки SELECT тут не обойтись.
Поэтому прошу выложите примеры как блокировать SELECT? на примере процедурного стиля так как я пишу скрипт на нём.