Из моего ответа здесь , подумал, что это может быть полезно:
Я попробовал много шагов, чтобы устранить эту проблему. Существует так много источников для возможных решений этой проблемы, что трудно отфильтровать смысл от бессмыслицы. Наконец, я нашел хорошее решение здесь :
Шаг 1: Идентифицировать версию базы данных
$ mysql --version
Вы увидите такой вывод с MySQL:
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
Или выводите как это для MariaDB:
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Обратите внимание, какая база данных и какая версия вы используете, поскольку вы будете использовать их позже. Затем вам нужно остановить базу данных, чтобы вы могли получить к ней доступ вручную.
Шаг 2: Остановка сервера базы данных
Чтобы изменить пароль root, вам необходимо закрыть сервер базы данных
Вы можете сделать это для MySQL с помощью:
$ sudo systemctl stop mysql
И для MariaDB с:
$ sudo systemctl stop mariadb
Шаг 3: Перезапуск сервера базы данных без Проверка прав доступа
Если вы запустите MySQL и MariaDB без загрузки информации о привилегиях пользователей, это позволит вам получить доступ к командной строке базы данных с правами root без предоставления пароля. Это позволит вам получить доступ к базе данных, не зная об этом.
Для этого вам необходимо остановить загрузку базы данных таблицами грантов, в которых хранятся данные о привилегиях пользователя.
Запустите базу данных без загрузки таблиц грантов или создания сетей:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Амперсанд в конце этой команды заставит этот процесс работать в фоновом режиме, чтобы вы могли продолжать использовать ваш терминал.
Теперь вы можете подключиться к базе данных как пользователь root, что не должно попросите пароль.
$ mysql -u root
Вместо этого вы сразу увидите приглашение оболочки базы данных.
MySQL Prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MariaDB Prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Теперь, когда у вас есть root-доступ, вы можете изменить пароль root.
Шаг 4: Изменение корневого пароля
mysql> FLUSH PRIVILEGES;
Теперь мы можем реально изменить пароль root.
Для MySQL 5.7.6 и новее, а также для MariaDB 10.1.20 и новее используйте следующую команду:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Для MySQL 5.7.5 и старше а также MariaDB 10.1.20 и старше, используйте:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Обязательно замените new_password
с вашим новым паролем по выбору.
Примечание. Если команда ALTER USER
не работает, это обычно указывает на большую проблему. Тем не менее, вы можете попробовать UPDATE ... SET
сбросить пароль root.
[ВАЖНО] Это конкретная строка, которая исправила мою конкретную проблему:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
Не забудьте перезагрузить таблицы предоставления после этого.
В любом случае вы должны увидеть подтверждение того, что команда была успешно выполнена.
Query OK, 0 rows affected (0.00 sec)
Пароль был изменен , поэтому теперь вы можете остановить ручной экземпляр сервера базы данных и перезагрузить его, как и раньше.
Шаг 5: Перезапустите сервер баз данных Обычно
В учебное пособие приводятся некоторые дополнительные шаги для перезапуска базы данных, но единственной частью, которую я использовал, было следующее:
Для MySQL используйте: $ sudo systemctl start mysql
Для MariaDB используйте:
$ sudo systemctl start mariadb
Теперь вы можете подтвердить, что новый пароль был применен правильно, выполнив:
$ mysql -u root -p
Теперь команда должна запросить новый пароль. Введите его, и вы должны получить доступ к приглашению базы данных, как ожидалось.
Заключение
Теперь у вас есть административный доступ к серверу MySQL или MariaDB. Убедитесь, что новый корневой пароль, который вы выбрали, прочный и безопасный и сохраните его в надежном месте.
Переходит к / u / bobbykjack в / r / PHPhelp для поиска проблемы.
Проблема в том, что функция запроса использовала процедурные вызовы и метод объекта, из-за чего объект не обновлял переменную insert_id.
Старый код:
public function query($str) {
$this->results = mysqli_query(self::$db, $str);
if($this->results===false) {
echo $this->mysqli_error();
}
else
return $this->results;
}
Новый код:
public function query($str) {
$this->results = parent::query($str);
if($this->results===false) {
echo $this->mysqli_error();
}
else
return $this->results;
}
Я также изучаю назначение этого класса базы данных, поскольку он кажется ненужным.
Я полагаю, что у вашего класса Database нет свойства insert_id, и, возможно, у класса его не должно быть, потому что insert_id является свойством mysqli-object . См.
$mysqli = new mysqli(host, user, pass, database_name); //create new mysqli object
$query = "write your own INSERT query";
$mysqli->query($query); //execute query
$last_id = $mysqli->insert_id; //get the last id of the row
. Внимательно прочитайте примеры в официальном руководстве: http://php.net/manual/ru/mysqli.insert-id.php
.