1 <?php
2
3 include __DIR__."/config.php";
4
5 class DbConnect{
6 private $connect;
7 public function __construct(){
8 $this->connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
9
10 $query = "SET NAMES 'utf8mb4'";
11 $query .= "SET GLOBAL max_allowed_packet=16777216";
11 mysqli_query($this->connect,$query);
13
14 if (mysqli_connect_errno($this->connect))
15 {
16 echo "Failed to connect to MySQL: " . mysqli_connect_error();
17 }
18 }
19
20 public function getDb(){
21 return $this->connect;
22 }
23 }
Выдает при обращении в логах:
Uncaught mysqli_sql_exception: 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 ‘SET GLOBAL max_allowed_packet=16777216’ at line 1 in /home/ascer175/domains/androidyava.today/public_html/sql/DB.php:12\nStack trace:\n#0 /home/ascer175/domains/androidyava.today/public_html/sql/DB.php(12): mysqli_query()\n#1 /home/ascer175/domains/androidyava.today/public_html/sql/DBOperations.php(159): DbConnect->__construct()\n#2 /home/ascer175/domains/androidyava.today/public_html/rest_api/register.php(20): DBOperations->isEmailExist()\n#3 {main}\n thrown in /home/ascer175/domains/androidyava.today/public_html/sql/DB.php on lin
Пересмотрел много разного, ни чего не нашел. php & mysql не знаю почти. Может кто подсказать?
Этот код нам выдали в группе, как простенький сервер для написания клиентской части приложения и у большинства он работает как на xamp так и на хостинге. При установке возникали разные ошибки, у кого-то сразу заработало, такой как у меня не было. Самая похожая - точно как у мну, только в 14 строке. Лечится: вместо
if (mysqli_connect_errno($this->connect))
просто
if ($this->connect).
Думаю здесь нечто похожее, но чтоб разобраться необходимо глубоко погрузиться в область, которая на данном этапе нужна только из-за сей ошибки))).
а, я понял.
действительно, этот код у некоторых "работает"
В том смысле, что он ничего не делает, поскольку является ошибочным
но и работу РНР не останавливает.
В общем, его можно просто выкинуть. как и бессмысленный код с if ($this->connect).
То есть, фактически, можно оставить только одну строчку
public function __construct(){
$this->connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
}
)) не буду спорить, но он работает. Качество его в данном раскладе абсолютно не важно, тк главное , чтобы он просто выполнял занесение в базу , порученных ему данных. Просто чтоб через него работал мессенджер и усё.
Сейчас обязательно испытаю Ваше вариант. Остановило сделать это сразу, отсутствие компа под рукой, ну и чуть насторожило Ваше "не будет работать" когда ра ботает (ток не у меня) )))
ну я уже объяснил: работать оно не работает вообще нигде. в смысле не выполняет то, что написано.
разница тут только в том, останавливает РНР выполнение скрипта, или нет.
где-то РНР останавливает работу, сообщая об ошибке, а где-то - молча её пропускает и продолжает выполнение дальше
зависит от настроек
[Thu Oct 06 10:43:37.813741 2022] [lsapi:error] [pid 1577727:tid 140648577009408] [client 54.86.50.139:34627] [host androidyava.today] Backend fatal error: PHP Fatal error: Uncaught mysqli_sql_exception: Access denied; you need (at least one of) the SUPER privilege(s) for this operation in /home/ascer175/domains/androidyava.today/public_html/sql/DB.php:15\nStack trace:\n#0 /home/ascer175/domains/androidyava.today/public_html/sql/DB.php(15): mysqli_query()\n#1 /home/ascer175/domains/androidyava.today/public_html/sql/DBOperations.php(159): DbConnect->__construct()\n#2 /home/ascer175/domains/androidyava.today/public_html/rest_api/register.php(20): DBOperations->isEmailExist()\n#3 {main}\n thrown in /home/ascer175/domains/androidyava.today/public_html/sql/DB.php on line 15\n
Теперь похоже прав нет. Но докуда мог дотянуться, включил всё. Могут быть какие-нить запреты на самом хосте?
15 строка это теперь
mysqli_query($this->connect, "SET GLOBAL max_allowed_packet=16777216");
2. Кроме того, я писал также, что писать эту строчку в принципе смысла нет:
Этот код ничего не делает, поскольку является ошибочным. Его можно просто выкинуть
Если применить такую штуку, как логика, то учитывая, что эта команда вообще никогда и ни у кого не выполнялась, и мессенджер при этом "работал", то можно заключить, что она является бесполезной. И писать её не нужно.
О чем я вам выше также уже сообщил.