Спасибо вам огромное! После того как проспался понял что @Fell-x27 был прав насчёт логики. Я в корне неправильно тебя понял! Сейчас наткнулся на регулярные выражения которые мне понадобятся для удаления "-" и ":" дабы mysql правильно заполнял поля datetime. Появились ещё вопросы к вам. 1.Если нужно в MySQL, добавить новые записи так, что бы при совпадении к примеру ID из бд, его не добавлять, а заносить только те которых в бд нет. Как нужно действовать? Производить выборку из базы, сравнивать, совпавшие отсеивать, а оставшиеся записывать? Или есть более лаконичный путь? 2.При подключении к MySQL как будет правильнее если действия происходят внутри цикла: открыть соединение, записать затем закрыть? или открыть соединение записать и закрыть после выполнения всего цикла? Лично я склоняюсь к варианту закрытия после всего цикла, но вы эксперты у вас информация точнее. Огромное вам спасибо за оказанную помощь)!!!
Если правильно тебя понял, тебе нужно: 1) чтобы этот твой ID был уникальным. То бишь, это либо primaryKey, либо на этой колонке должен быть unique index. 2) для вставки использовать синтаксис INSERT INTO ON DUPLICATE KEY UPDATE; По-хорошему, запросов в цикле надо избегать. MySQL позволяет многие операции делать пакетно, то есть по многу за раз. Как то, что до этого ты делал, накопить пачку данных и отдать. Это удобно очень, и правильно с точки зрения производительности. Но не всегда возможно, да. Если запросов в цикле не избежать (но ты постарайся), то, разумеется, нужно открыть соединение до этого, после чего все сделать, и закрыть уже в самом конце. А можно вообще не закрывать, потому что PHP сделает это автоматически по завершению работы.
У меня вновь вопрос. Возможно уже такой задавали но всё же и я спрошу. При использовании Код (Text): $connect = mysqli_connect($dbadress, $dbuser, $dbpassword, $dbname); mysqli_real_query($connect , "DELETE FROM `ards` WHERE 1"); обязательно ли использовать $connect в запросе. Мануал по этой функции читал но на этот вопрос ответа не нашёл. Интересует почему: если запрос будет использоваться в цикле то постоянно идёт переподключение к бд что не есть хорошо. Я пойду поищу дальше, но возможно вы направите на путь истинный быстрее чем я найду. Заранее спасибо)
В мануале четко сказано, что это обязательный параметр. Дык а кто тебе сказал, что $connect надо каждый раз заново создавать? Один раз его сделай и храни где-нибудь в статичном классе или в виде глобальной переменной. Статичный класс предпочтительней. И везде ее пихай. Это линк на коннект к БД. Он будет рабочим, пока этот коннект к БД открыт.
В таком виде? Код (Text): $mysqli = new mysqli($dbadress, $dbuser, $dbpassword, $dbname); $query = "DELETE FROM `ards` WHERE 1"; $mysqli->multi_query($query);
Нет. Ты, конечно, создал объект mysqli, который сам в себе хранит коннект, но...этот объект тебе тоже надо хранить где-то. Не будешь же ты каждый раз заново его создавать?
И снова доброго времени суток! Я наверно тут уже всех вас задолбал, но мне очень хочется продолжать изучать PHP... Постарался сделать как можно лаконичнее код, но меня не покидает ощущение что тут что то не так. PHP: <?php class bd { static function connect () { return mysqli_connect('localhost', 'root', '', 'evio'); } static function setquery ($quest) { return mysqli_query(bd::connect(),$quest); } } $url = 'https://esi.tech.ccp.is/latest/markets/10000002/orders/?datasource=tranquility&order_type=buy&page=1&type_id=34'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $jsondata = curl_exec($ch); curl_close($ch); $arrdata = json_decode($jsondata, true); $delreq = "DELETE FROM `ards` WHERE 1"; bd::setquery($delreq); function writebd($rawdata){ $quarkdata = ""; foreach ($rawdata as $arrdata) { $enddata = "('" . implode("','", $arrdata) . "'),"; $quarkdata = $quarkdata.$enddata; } return substr_replace($quarkdata,';',-1); } bd::setquery("INSERT INTO ards values ".writebd($arrdata)) ?> Буду рад если опять направите в нужное русло. Спасибо!!!)))
Вот что покоя таки не давало). По моему так лучше) PHP: <?php class bd { static function connect () { return mysqli_connect('localhost', 'root', '', 'evio'); } static function setquery ($quest) { return mysqli_query(bd::connect(),$quest); } static function alldel (){ return mysqli_query(bd::connect(), "DELETE FROM `ards` WHERE 1"); } } class reconstruct { function writebd($rawdata){ $quarkdata = ""; foreach ($rawdata as $arrdata) { $enddata = "('" . implode("','", $arrdata) . "'),"; $quarkdata = $quarkdata.$enddata; } return substr_replace($quarkdata,';',-1); } } class curl { function docurl($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); return curl_exec($ch); curl_close($ch); } } bd::alldel(); bd::setquery("INSERT INTO ards values ".reconstruct::writebd(json_decode(curl::docurl('https://esi.tech.ccp.is/latest/markets/10000002/orders/?datasource=tranquility&order_type=buy&page=1&type_id=34'), true))) ?> Это нормально или я перегнул?))
Если вкратце то это то что было в начале всей этой темы которую я начал. PHP: <?php class bd { #подключение к бд static function connect () { return mysqli_connect('localhost', 'root', '', 'evio'); } # Запросчик к бд static function setquery ($quest) { return mysqli_query(bd::connect(),$quest); } #зачистка бд перед внесением данных static function alldel (){ return mysqli_query(bd::connect(), "DELETE FROM `ards` WHERE 1"); } } class reconstruct { #Перебор массива function writebd($rawdata){ $quarkdata = ""; foreach ($rawdata as $arrdata) { $enddata = "('" . implode("','", $arrdata) . "'),"; $quarkdata = $quarkdata.$enddata; } #Замена запятой на ; в конце строки return substr_replace($quarkdata,';',-1); } } class curl { #парсер function docurl($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); return curl_exec($ch); curl_close($ch); } } #Зачистка бд bd::alldel(); #Запись разобранного массива в бд вызов перебора массива декодинг из json ссылка из которой парсером получаем данные bd::setquery("INSERT INTO ards values ".reconstruct::writebd(json_decode(curl::docurl('https://esi.tech.ccp.is/latest/markets/10000002/orders/?datasource=tranquility&order_type=buy&page=1&type_id=34'), true))) ?> работает так: 1. Запрос на очистку бд перед внесением данных. 2. Парсим урл 3. Декодируем json данные из урла 4. Перебираем получившийся ассоциативный массив с правкой строки для приведения её к виду sql запроса 5. Записываем в бд получившуюся строку примерно в таком виде Код (Text): INSERT INTO example (example_id, name, value, other_value) VALUES (100, 'Name 1', 'Value 1', 'Other 1'), (101, 'Name 2', 'Value 2', 'Other 2'), (102, 'Name 3', 'Value 3', 'Other 3'), (103, 'Name 4', 'Value 4', 'Other 4'); На этом всё. P.S. Подозреваю что можно было обойтись без курла ,но захотелось с ним))
1) База данных в инглише - Database. То есть DB. Не BD. 2) Имена переменных пиши либо в стиле camelCase, либо snake_case. Простописатьводнустрокусловабезхотькакоготоразделенияненужно. 3) Зачем тебе тут ООП, если ты им не пользуешься? То, как ты docurl вызываешь вообще должно валиться с ошибкой и является багом в PHP. Причем, сначала ты static прописывал, а потом перестал.. Вот правда, выкинуть у тебя тут классы, оставить только функции и к ним обращаться по-обычному, и вот вообще ничего не изменится
Это я знал, написал так наверно потому что про себя называл по Русски бд оттого видимо и bd. В преть учту. Незнал что есть стили написания переменных. Учтено, вскоре изучу что это за стили. Согласен. Под разделителем имеется ввиду пробел? Если можно то объясни пожалуйста поподробнее насчёт курла. В общем виде понял, перепишу. Спасибо огромное!
Под разделителем имеются ввиду либо заглавныеБуквы, чтобы отделять одноСловоОтДругого в названии. Либо нижний_слэш_он_же_символ_подчеркивания. Это и есть те самые camelCase и snake_case.