Это предупреждение появляется при подключении к серверу MySQL / MariaDB с недопустимыми или отсутствующими учетными данными (имя пользователя / пароль). Таким образом, это обычно не проблема с кодом, а проблема конфигурации сервера.
См. Справочную страницу в mysql_connect("localhost", "user", "pw")
для примеров.
Убедитесь, что вы действительно использовали кнопки $username
и $password
.
(using password: NO)
. Только локальный тестовый сервер обычно позволяет подключаться с именем пользователя root
, без пароля и с именем базы данных test
.
Вы можете проверить, действительно ли они исправлены с помощью клиента командной строки: mysql --user="username" --password="password" testdb
Имя пользователя и пароль с учетом регистра и пробел не игнорируется. Если ваш пароль содержит метасимволы, такие как $
, откройте их или поместите пароль в одиночные кавычки .
Большинство хостинг-провайдеров предопределяют учетные записи mysql в отношении учетной записи пользователя unix (иногда просто префиксы или дополнительные числовые суффиксы). См. Документы для шаблона или документации, а также CPanel или любой другой интерфейс для установки пароля.
См. Руководство по MySQL в Добавление учетных записей пользователей с помощью командной строки. При подключении к администратору вы можете выдать запрос, например: CREATE USER 'username'@'localhost' IDENTIFIED BY 'newpassword';
Или использовать Администратор или [ 1137] WorkBench или любой другой графический инструмент для создания, проверки или исправления данных учетной записи.
Если вы не можете исправить свои учетные данные, тогда запрос в Интернете «пожалуйста, помогите» не будет иметь никакого эффекта. Только у вас и вашего хостинг-провайдера есть разрешения и достаточный доступ для диагностики и исправления.
Убедитесь, что вы могли достигнуть сервера базы данных, используя имя хоста, указанное вашим провайдером: ping dbserver.hoster.example.net
Проверьте это с консоли SSH непосредственно на своем веб-сервере. Тестирование с вашего локального клиента разработки на ваш хостинг-сервер редко имеет смысл.
Часто вы просто хотите, чтобы имя сервера было "localhost"
, которое обычно использует локальный именованный сокет, когда он доступен. В других случаях вы можете попробовать "127.0.0.1"
как резерв.
Если ваш сервер MySQL / MariaDB прослушивает другой порт, используйте "servername:3306"
.
Если это не удается, тогда есть проблема с брандмауэром.
При использовании констант , таких как, например, [11144]. DB_USER
или DB_PASSWORD
, убедитесь, что они на самом деле определены .
Если вы получите "Warning: Access defined for 'DB_USER'@'host'"
и "Notice: use of undefined constant 'DB_PASS'"
, то это ваша проблема.
Убедитесь, что ваш, например, xy/db-config.php
был фактически включен и что угодно.
Проверьте правильность установки GRANT
разрешений .
Недостаточно иметь пару username
+ password
.
Каждая учетная запись MySQL / MariaDB может иметь прикрепленный набор разрешений.
Те могут ограничить, к каким базам данных вам разрешено подключаться, из которых клиент или сервер может возникнуть соединение и какие запросы разрешены.
Предупреждение «Доступ запрещен» может также отображаться для вызовов mysql_query
, если у вас нет прав на SELECT
из определенной таблицы или INSERT
/ UPDATE
, и чаще всего DELETE
.
Вы можете адаптировать разрешения учетной записи при подключении к каждому клиенту командной строки с помощью учетной записи администратора с запросом типа: GRANT ALL ON yourdb.* TO 'username'@'localhost';
Если предупреждение появляется сначала с помощью Warning: mysql_query(): Access denied for user ''@'localhost'
, тогда у вас может быть php.ini-preconfigured учетной записи / пароля .
Убедитесь, что mysql.default_user=
и mysql.default_password=
имеют значимые значения.
Часто это конфигурация провайдера. Поэтому обратитесь к их поддержке несоответствий.
Найдите документацию вашего хостинг-провайдера:
, например. HostGator , GoDaddy , 1 и 1 , DigitalOcean , BlueHost , DreamHost , ] MediaTemple , ixWebhosting , lunarhosting или просто google yours ».
Еще раз обратитесь к своему провайдеру хостинга через свои каналы поддержки.
Обратите внимание, что вы также можете исчерпать доступный пул соединений . Вы получите доступ к запрещенным предупреждениям для слишком большого количества параллельных подключений.
Ваша версия клиента libmysql может быть несовместимой с сервер базы данных. Обычно MySQL и MariaDB-серверы можно получить с помощью PHP, скомпилированных в драйвере. Если у вас есть пользовательская настройка или устаревшая версия PHP, а также гораздо более новый сервер базы данных или значительно устаревший - тогда несоответствие версии может препятствовать подключению. (Нет, вам нужно исследовать себя. Никто не может угадать вашу настройку).
Дополнительные ссылки:
Кстати, вы, вероятно, больше не хотите использовать функции
blockquote>mysql_*
[1156 ]. Новички часто мигрируют в mysqli , что, однако, так же утомительно. Вместо этого прочитайте в PDO и подготовленные утверждения .$db = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");
Вдохновленный более ранними ответами, но более простой, и без рекурсии. Кроме того, это не заботится, каков разделительный символ, как Dir.Parent
покрытия это:
/// <summary>
/// Split a directory in its components.
/// Input e.g: a/b/c/d.
/// Output: d, c, b, a.
/// </summary>
/// <param name="Dir"></param>
/// <returns></returns>
public static IEnumerable<string> DirectorySplit(this DirectoryInfo Dir)
{
while (Dir != null)
{
yield return Dir.Name;
Dir = Dir.Parent;
}
}
Или палка это в static
класс, чтобы создать хороший дополнительный метод или просто не учесть this
(и static
).
пример Использования (как дополнительный метод) для доступа к частям пути числом:
/// <summary>
/// Return one part of the directory path.
/// Path e.g.: a/b/c/d. PartNr=0 is a, Nr 2 = c.
/// </summary>
/// <param name="Dir"></param>
/// <param name="PartNr"></param>
/// <returns></returns>
public static string DirectoryPart(this DirectoryInfo Dir, int PartNr)
{
string[] Parts = Dir.DirectorySplit().ToArray();
int L = Parts.Length;
return PartNr >= 0 && PartNr < L ? Parts[L - 1 - PartNr] : "";
}
Оба выше методов находятся теперь в моей персональной библиотеке, следовательно комментарии xml. Пример использования:
DirectoryInfo DI_Data = new DirectoryInfo(@"D:\Hunter\Data\2019\w38\abc\000.d");
label_Year.Text = DI_Data.DirectoryPart(3); // --> 2019
label_Entry.Text = DI_Data.DirectoryPart(6);// --> 000.d
string mypath = @"..\folder1\folder2\folder2";
string[] directories = mypath.Split(Path.DirectorySeparatorChar);
Редактирование: Это возвращает каждую отдельную папку в массиве каталогов. Можно получить количество папок, возвращенных как это:
int folderCount = directories.Length;
Я записал следующий метод, который работает на меня.
protected bool isDirectoryFound(string path, string pattern)
{
bool success = false;
DirectoryInfo directories = new DirectoryInfo(@path);
DirectoryInfo[] folderList = directories.GetDirectories();
Regex rx = new Regex(pattern);
foreach (DirectoryInfo di in folderList)
{
if (rx.IsMatch(di.Name))
{
success = true;
break;
}
}
return success;
}
строки, самые подходящие для Вашего вопроса быть:
каталоги DirectoryInfo = новый DirectoryInfo (@path); DirectoryInfo [] folderList = каталоги. GetDirectories ();
Существует несколько способов, которыми может быть представлен путь к файлу. Необходимо использовать System.IO.Path
класс для получения разделителей для ОС, так как это может варьироваться между UNIX и Windows. Кроме того, большинство (или все, если я не ошибаюсь) библиотеки.NET принимает или '\' или '/' как разделитель пути, независимо от ОС. Поэтому я использовал бы класс Пути для разделения путей. Попробуйте что-то как следующее:
string originalPath = "\\server\\folderName1\\another\ name\\something\\another folder\\";
string[] filesArray = originalPath.Split(Path.AltDirectorySeparatorChar,
Path.DirectorySeparatorChar);
Это должно работать независимо от количества папок или имен.
Или, если необходимо сделать что-то с каждой папкой, взглянуть на Систему. Класс IO.DirectoryInfo. Это также имеет свойство Parent, которое позволяет Вам перейти к родительскому каталогу.
Это хорошо в общем случае:
yourPath.Split(@"\/", StringSplitOptions.RemoveEmptyEntries)
нет никакого пустого элемента в возвращенном массиве, если сам путь заканчивается в (спина) наклонная черта (например, "\foo\bar \"). Однако необходимо будет быть уверены, что yourPath
действительно каталог и не файл. Можно узнать то, что это, и компенсируйте, если это - файл как это:
if(Directory.Exists(yourPath)) {
var entries = yourPath.Split(@"\/", StringSplitOptions.RemoveEmptyEntries);
}
else if(File.Exists(yourPath)) {
var entries = Path.GetDirectoryName(yourPath).Split(
@"\/", StringSplitOptions.RemoveEmptyEntries);
}
else {
// error handling
}
я полагаю, что это покрывает все основания, не будучи слишком педантичным. Это возвратится string[]
, что можно выполнить итерации с foreach
для получения каждого каталога в свою очередь.
, Если Вы хотите использовать константы вместо @"\/"
волшебная строка, необходимо использовать
var separators = new char[] {
Path.DirectorySeparatorChar,
Path.AltDirectorySeparatorChar
};
и затем использовать separators
вместо @"\/"
в коде выше. Лично, я нахожу это слишком подробным и скорее всего не сделал бы этого.
Быстрый ответ должен использовать.Split (' \\') метод.
Возможно, звоните Каталог. GetParent в цикле? Это - то, если Вы хотите полный путь к каждому каталогу и не только именам каталогов.