Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
-8 / 2 / 1
Регистрация: 10.09.2019
Сообщений: 71

Объявление глобально PHP7 $connect

23.12.2021, 07:39. Показов 865. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите пожалуйста, почему когда я объявляю глобально коннект к базе SQL переменной $connect, PHP7.1.5 не видит эту переменную внутри других функции где выполняется запрос к базе?
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
$serverName = '******';
$connectionInfo = array( "Database"=>"*****", "UID"=>"****", "PWD"=>"*****", "CharacterSet" => "UTF-8");
$connect = sqlsrv_connect($serverName, $connectionInfo)or die("Невозможно выполнить соединение!");
global $connect;
//global $text="м.п/п";
 
// ПК
if (isset($_GET['pk'])) {
    $curPk = $_GET['pk'];
    $tableAttr = $_GET['pk'].'attr';
    $tableMin = $_GET['pk'].'min';
} else {
    $curPk = 'pk1';
    $tableAttr = 'pk1attr';
    $tableMin = 'pk1min';
}
// Дата
if (isset($_GET['date'])) {
    $curDate = $_GET['date'];
} else { // Если не установлена, то текущая
    $curDate = date('Y-m-d');
}
// Минимальное значение температуры
if (isset($_GET['minvalue'])) {
    if ($_GET['minvalue'] != '') {
        $minValue = $_GET['minvalue'];
    } else {
        $minValue = 550;
    }
} else {
    $minValue = 550;
}
 
// ajax запрос на получение таблицы
if (isset($_GET['ajax'])) {
    $type_report = $_GET['type_report'];
    
    getTimeReport($type_report);
    exit;
}
 
function getCountAndMax ($currentDate, $period, $key) { // Получить количество минут и максимальную температуру за определенный промежуток времени
    $result = array('cnt' => 0, 'max' => 0);
    $exp = explode(' ', $currentDate);
    $expDate = explode('-', $exp[0]);
    if ($period == 'year') { // с начала года
        $startDate = $expDate[0].'-01-01';
    } elseif ($period == 'month') { // с начала месяца
        $startDate = $expDate[0].'-'.$expDate[1].'-01';
    } else { // с начала суток
        $startDate = $currentDate;
    }
    global $tableAttr;
    global $tableMin;
    global $minValue;
 
    $text=iconv("", "cp1251", "м.п/п");
    $q = sqlsrv_query($connect, "SELECT COUNT(tblMin.val) as cnt, MAX(tblMin.val) as max FROM $tableAttr as tblAttr, $tableMin as tblMin
    WHERE tblAttr.RecordID = tblMin.RecordID AND tblMin.RecordID = $key
    AND (tblMin.dt BETWEEN CONVERT(datetime,'$startDate 00:00:00') AND CONVERT(datetime,'$currentDate 23:59:59'))
    AND tblAttr.[66] LIKE '%$text%' AND tblMin.val > $minValue ORDER BY tblAttr.RecordID, tblMin.dt");
    $num = sqlsrv_num_rows($q);
    
    if ($num != 0) {
        $mas = sqlsrv_fetch_array($q);
        $result['cnt'] = $mas['cnt'];
        $result['max'] = round($mas['max'], 3);
    } else {
        $result['cnt'] = 0;
        $result['max'] = 0;
    }
    
    return $result;
}
 
// Получить таблицу из интервала
function getTimeReport ($type_report) {
    global $tableAttr;
    global $tableMin;
    global $minValue;
    global $curDate;
    global $curPk;
 
    // Значение за час
    function getValHour ($date, $hour, &$arrTable) {
        global $tableAttr;
        global $tableMin;
        global $minValue;
        $minValue = (int) $minValue;
        /* MSSQL */
 
        $text=iconv("", "cp1251", "м.п/п");
        $q = sqlsrv_query($connect, "SELECT COUNT(tblAttr.RecordID) as cnt, tblAttr.RecordID, MAX(tblMin.val) as mx FROM $tableAttr as tblAttr, $tableMin as tblMin
        WHERE tblAttr.RecordID = tblMin.RecordID AND (tblMin.dt BETWEEN CONVERT(datetime,'$date $hour:00:00') AND CONVERT(datetime,'$date $hour:59:59')) 
        AND tblAttr.[66] LIKE '%$text%' AND tblMin.val > $minValue GROUP BY tblAttr.RecordID");
        
        while ($row = sqlsrv_fetch_array($q)) {
            $hour = (int) $hour;
            if (array_key_exists($row['RecordID'], $arrTable)) {
                if (!array_key_exists($hour, $arrTable[$row['RecordID']][2])) {
                    $arrTable[$row['RecordID']][2][$hour] = array('cnt' => 0, 'max' => 0);
                }
                $arrTable[$row['RecordID']][2][$hour]['cnt'] = $row['cnt']; // количество минут
                $row['mx'] = round($row['mx'], 3); // максимальное значение
                $arrTable[$row['RecordID']][2][$hour]['max'] = $row['mx'];
            }
        }
    }
    echo '<table bgcolor="#F2F2F2" cellpadding="0" cellspacing="0">
          <tr>';
        // Берем из бд значения
        $arrTable = array();
        /* MSSQL */
        $text=iconv("", "cp1251", "м.п/п");
        
 
        $q = sqlsrv_query($connect, "SELECT tblAttr.RecordID, tblAttr.[66] FROM $tableAttr as tblAttr WHERE tblAttr.[66] LIKE '%$text%'");
        
        while ($row = sqlsrv_fetch_array($q)) {
            // Формируем столбцы
            if (!array_key_exists($row['RecordID'], $arrTable)) {
                $arrTable[$row['RecordID']] = array(0 => $row['RecordID'], 1 => $row['66'], 2 => array()); // Для каждого часа устанавливаем количество минут и максимальное значение
            }
        }
        
        // Левая колонка
        echo '<td>
            <div class="oneTr2">'.$curDate.'</div>
            <div class="oneTr2"></div>
            <div class="oneTr2"></div>
            <div class="oneTr2"></div>
        ';
        
        if ($type_report == 'day_report') { // Суточный отчет
            for ($i = 0; $i < 24; $i++) {
                $hour = ($i < 10) ? str_pad($i, 2, '0', STR_PAD_LEFT) : $i; // Добавляем нули к числу при необходимости
                getValHour($curDate, $hour, $arrTable);
                echo '<div class="oneTr">'.$hour.':00</div>';
            }
        } elseif ($type_report == 'interval1_report') { // 8:00 - 20:00
            for ($i = 8; $i <= 20; $i++) {
                $hour = ($i < 10) ? str_pad($i, 2, '0', STR_PAD_LEFT) : $i; // Добавляем нули к числу при необходимости
                getValHour($curDate, $hour, $arrTable);
                echo '<div class="oneTr">'.$hour.':00</div>';
            }
        } elseif ($type_report == 'interval2_report') { // 20:00 - 8:00
            $yesterday = date('Y-m-d', strtotime('-1 day', strtotime($curDate)));
            for ($i = 20; $i <= 23; $i++) {
                $hour = ($i < 10) ? str_pad($i, 2, '0', STR_PAD_LEFT) : $i; // Добавляем нули к числу при необходимости
                getValHour($yesterday, $hour, $arrTable);
                echo '<div class="oneTr">'.$hour.':00</div>';
            }
            for ($i = 0; $i <= 8; $i++) {
                $hour = ($i < 10) ? str_pad($i, 2, '0', STR_PAD_LEFT) : $i; // Добавляем нули к числу при необходимости
                getValHour($curDate, $hour, $arrTable);
                echo '<div class="oneTr">'.$hour.':00</div>';
            }
        }
        echo '<div class="oneTr2">С начала суток</div>
            <!--<div class="oneTr2">С начала месяца</div>
            <div class="oneTr2">С начала года</div>-->
            <div class="oneTr2">Текущее значение</div>
        </td>';
        echo '<td valign="top">
        <table cellpadding="0" cellspacing="0">
        <tr><div class="centerTr">'.$curPk.'</div></tr>
        <tr><div class="centerTr">Тм. п/п вит.</div></tr>
        <tr>';
        // Вывод остальных колонок
        foreach ($arrTable as $key => $value) {
            echo '<td>';
            
            $txt=mb_convert_encoding($value[1], "", "UTF-8");
            echo '<div class="oneTr2">'.$txt.'</div>';
            echo '<div class="oneTr2"><div class="leftSubTr">Длит. мин.</div><div class="rightSubTr">tmax. C</div></div>';
            $sum = 0;
            $max = 0;
            // По часам
            if ($type_report == 'day_report') { // Суточный отчет
                for ($i = 0; $i < 24; $i++) {
                    $cnt = 0;
                    $mx = 0;
                    if (array_key_exists($i, $value[2])) {
                        $cnt = $value[2][$i]['cnt'];
                        $mx = $value[2][$i]['max'];
                    }
                    echo '<div class="oneTr"><div class="leftSubTr">'.$cnt.'</div><div class="rightSubTr">'.$mx.'</div></div>';
                    $sum = $sum + $cnt;
                    if ($mx > $max) {
                        $max = $mx;
                    }
                }
            } elseif ($type_report == 'interval1_report') { // 8:00 - 20:00
                for ($i = 8; $i <= 20; $i++) {
                    $cnt = 0;
                    $mx = 0;
                    if (array_key_exists($i, $value[2])) {
                        $cnt = $value[2][$i]['cnt'];
                        $mx = $value[2][$i]['max'];
                    }
                    echo '<div class="oneTr"><div class="leftSubTr">'.$cnt.'</div><div class="rightSubTr">'.$mx.'</div></div>';
                    $sum = $sum + $cnt;
                    if ($mx > $max) {
                        $max = $mx;
                    }
                }
            } elseif ($type_report == 'interval2_report') { // 20:00 - 8:00
                for ($i = 20; $i <= 23; $i++) {
                    $cnt = 0;
                    $mx = 0;
                    if (array_key_exists($i, $value[2])) {
                        $cnt = $value[2][$i]['cnt'];
                        $mx = $value[2][$i]['max'];
                    }
                    echo '<div class="oneTr"><div class="leftSubTr">'.$cnt.'</div><div class="rightSubTr">'.$mx.'</div></div>';
                    $sum = $sum + $cnt;
                    if ($mx > $max) {
                        $max = $mx;
                    }
                }
                for ($i = 0; $i <= 8; $i++) {
                    $cnt = 0;
                    $mx = 0;
                    if (array_key_exists($i, $value[2])) {
                        $cnt = $value[2][$i]['cnt'];
                        $mx = $value[2][$i]['max'];
                    }
                    echo '<div class="oneTr"><div class="leftSubTr">'.$cnt.'</div><div class="rightSubTr">'.$mx.'</div></div>';
                    $sum = $sum + $cnt;
                    if ($mx > $max) {
                        $max = $mx;
                    }
                }
            }
            
            echo '<div class="oneTr2"><div class="leftSubTr">'.$sum.'</div><div class="rightSubTr">'.$max.'</div></div>';
            //$monthVal = getCountAndMax($curDate, 'month', $key);
            //echo '<div class="oneTr"><div class="leftSubTr">'.$monthVal['cnt'].'</div><div class="rightSubTr">'.$monthVal['max'].'</div></div>';
            //$yearVal = getCountAndMax($curDate, 'year', $key);
            //echo '<div class="oneTr"><div class="leftSubTr">'.$yearVal['cnt'].'</div><div class="rightSubTr">'.$yearVal['max'].'</div></div>';
            echo '<div class="oneTr cur_val" data-id="'.$key.'"></div>';
            echo '</td>';
        }
        
    echo'
        </tr>
        </table>
        </td>
        </tr>
    </table>';
    
}
sqlsrv_close ($connect);
?>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2021, 07:39
Ответы с готовыми решениями:

Как боротся с вирусом a-connect(i-connect,z-connect)
Итак расскажу что за вирус... Этот вирус создает новое подключение VPN a-connect и через 1-2 минуты отключается интернет. Еще создает EXE...

Perl + MySQL = ошибка DBI connect(dbname=mysql; host=localhost',''...) failed: Couldnt connect to
С перлом беда какая-то, третий день мучаюсь и ничего не получается... хелп!!!. use dbi; $dbh =...

Could not connect: Can't connect to MySQL server
Здраствуйте. Очень прошу Вашей помощи. Уже не знаю что делать, ужас просто какой то. Раньше все работало нормально, а сейчас что то не...

2
Невнимательный
 Аватар для ft4l
3107 / 1279 / 358
Регистрация: 08.02.2013
Сообщений: 7,477
Записей в блоге: 2
23.12.2021, 09:22
Лучший ответ Сообщение было отмечено naften как решение

Решение

Цитата Сообщение от naften Посмотреть сообщение
global $connect;
ключевое слово global для того чтобы внутри функции задать переменную,
которая будет ссылаться на такую-же переменную из глобальной области видимости.
Вне функций/методов оно никак не должно работать.

Как вариант статическую переменную из класса можно использовать.
как-бы в простейшем случае можно так перефразировать
PHP
1
2
3
4
5
6
7
8
9
10
class DB {
  static protected $serverName = '******';
  static protected $connectionInfo = array( "Database"=>"*****", "UID"=>"****", "PWD"=>"*****", "CharacterSet" => "UTF-8");
  static public $connect;
  static public function init(){
    self::$connect = sqlsrv_connect(self::$serverName, self::$connectionInfo)
       or die("Невозможно выполнить соединение!");
  }
 
DB::init();// или тут-же или в любом месте перед запросами
И во всяких функциях будет видно DB::$connect
Но это сильно упрощённо, и можно и на объектах сделать, и вместо функций, методы,
возможно в объектах классов наследующих класс или ещё как.
Или возможно даже приведённое например раскидать по разным классам ) настройки в parent подключения self
А это так,)для ленивых
1
-8 / 2 / 1
Регистрация: 10.09.2019
Сообщений: 71
23.12.2021, 10:39  [ТС]
Сработало. Можно закрывать тему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2021, 10:39
Помогаю со студенческими работами здесь

"Can't connect to MySQL server on 'localhost' (10061) QMYSQL: Unable to connect"
Добрый день! У меня следующая проблема на Windows XP установила QtCreator и MySQL сервер теперь сам вопрос в коде создаётся база данных,...

Выдаёт Database Error: Unable to connect to the database:Could not connect to MySQL
Здравствуйте! У меня сайт находится на основном домене но я сделал DNS и прикрепил ещё один домен. По началу работало всё замечательно. Но...

Database Error: Unable to connect to the database: Could not connect to MySQL
Приветствую! Установил на localhost Joomla. Установка прошла успешно, но когда захожу на главную или в админку, то выдаёт ошибку: ...

Database Error: Unable to connect to the database:Could not connect to MySQL
Здравствуйте!!! Помогите новичку! Ушел на выходные, пришел сегодня запускаю сайт а мне выдает Database Error: Unable to connect to the...

Php7 и mssql
Добрый вечер, друзья! У меня 2 вот таких проблемы. 1) Делаю запрос в базу данных, возвращаются данные, я сохраняю их в массив и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru