здравствуйте! есть скрипт такого вида: Код (Text): <?php include ('../utils/dbconncxp.php'); include ('../utils/dbconnbo.php'); $q = sql_query($connbo, "select * from bo.table where (Close = '1' or Close = '') and BaseNum = ''"); while ($i = sql_fetch_array($q)){ $clid = $i['ClientID']; $inf = P_CLIENTPROFILES($clid, $now, $dt); if(isset($inf)){ sql_query($conncxp, "update crm.CRMListProduct_DontSend set isActiveBlock = 0 where ClientId = $clid"); }else{ InOkb($connbo, $clid); } } скрипт работает почти час и случается, что коннект по include ('../utils/dbconncxp.php'); отваливается по таймауту, там редко идёт обращение к этому коннекту... подскажите, уважаемые гуру, как сделать, чтобы коннект происходил только по необходимости? может быть таким образом сделать? Код (Text): ....... if(isset($inf)){ include_once ('../utils/dbconncxp.php'); sql_query($conncxp, "update crm.CRMListProduct_DontSend set isActiveBlock = 0 where ClientId = $clid"); }else{ InOkb($connbo, $clid); } ...... или может есть как-то другой способ? заранее спасибо за ответ!
Добрый день! Допустим что, функция sql_query работает также как PHP функция mysqli_query. Ecли скрипт работает почти час, то нужно попробовать оптмизировать SQL запросы. Например, здесь выбираются все колонки таблицы Код (Text): select * from bo.table where (Close = '1' or Close = '') and BaseNum = '' а далее обрабатывается только одна колонка 'ClientID', поэтому запрос можно изменить так Код (Text): select ClientID from bo.table where (Close = '1' or Close = '') and BaseNum = '' Если определить в структуре таблице для колонки Close тип integer, то можно так изменить запрос Код (Text): select ClientID from bo.table where Close <= 1 and BaseNum = '' Это выглядит неправдоподобно PHP: <? $inf = P_CLIENTPROFILES($clid, $now, $dt); if(isset($inf)) { } Если же как-то реализовать эту проверку, то лучше не ставить include_once и не делать update в цикле, а сохранять в массиве $clidArr значения $clid. После завершения, цикла PHP: is_array($clidArr) { include_once ('../utils/dbconncxp.php'); $clidStr= implode(",",$clidArr); $query = "update crm.CRMListProduct_DontSend set isActiveBlock = 0 where ClientId IN($clidStr)"; sql_query($conncxp, $query ); } Удачи!
я не стал описывать ВСЮ систему , там очень много обращений к сетевым сервисам, которые отрабатывают не так уж и быстро... взял кусочек, на котором и был вылет по таймауту, но Ваш ответ меня более чем устроил, тот, который я процитировал! осталось только его проверить, но беда в том, что всё это нужно раз в месяц и теперь нужно ждать следующего... чувствую, что Ваше решение мне прекрасно подойдёт! огромное спасибо!
Это тот случай, когда в процессе работы скрипта имеет смысл делать множественные открытия и закрытия! соединения (не обязательно при каждом запросе – сами см. на запросы). Делать db_connect include'ом файла не айс! В начале скрипта подключите файл с соотв. ф-циями, а потом их вызывайте, где надо.
так исторически сложилось, что все функции коннектов лежат в отдельном конфиге и оттуда таскаются в скрипты через вот эти include и админы мне оторвут руки/ноги, если я стану что-то делать на своей стороне! я думал сделать то, что предложили Вы, но как только я об этом заикнулся, то в мою сторону полетели лучи поноса, потому и обратился к старшим товарищам (т.е. к вам) за помощью! Vladimir Kheifets - показал отличное решение...