PDA

Просмотр полной версии : PHP и MySQL, ошибка конекта, которой в принципе быть не должно


0x22b
06.07.2008, 12:11
Имеется файл config.php в нем содержаться параметры для соеденения с БД

<?php
//указываем параметры для подключения к БД
$host = "localhost";
$login = "root";
$password = "";
$db_name = "cms";
?>
также есть файл get_information.php.

require("config.php");

function get_menu()
{
$dbcon = mysql_connect($host, $login, $password) or die('База данных не доступна');
mysql_select_db($db_name);
$qGetMenu = 'select * from menu';
$rGetMenu = mysql_query($qGetMenu) or die('Таблица не доступна');
if (mysql_num_rows($rGetMenu) != 0)
{
return $rGetMenu;
}
else
{
return false;
}
}
В index.php есть момент когда функция get_menu() используется. В принципе как видно из примера все должно работать, а именно конект с базой. Но появляется следующая ошибка:

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in Z:\home\cms.ru\www\get_information.php on line 6
В строке 6 содержитсяфункция конекта с БД. Нет доступа, но с какой стати? Почему у меня появляется эта ошибка? Заранее всем благодарен.

Shadow_p1raT
06.07.2008, 12:15
Значаит ты неправильно указал логин/пасс.

0x22b
06.07.2008, 12:16
Логин пасс указаны правельно.. потому что если, их ввести напрямую в функцию, то все работает.

FraiDex
06.07.2008, 12:20
а ты попробуй
$dbcon = mysql_connect($host, $login, $password) or die('База данных не доступна');
mysql_select_db($db_name);

записать в файл config.php

etc
06.07.2008, 12:25
А ты не хочешь global добавить в ф-цию? Иначе он просто их не видит :)

function get_menu()
{
global $host, $login, $password, $db_name;
$dbcon = mysql_connect($host, $login, $password) or die('База данных не доступна');
mysql_select_db($db_name);
$qGetMenu = 'select * from menu';
$rGetMenu = mysql_query($qGetMenu) or die('Таблица не доступна');
if (mysql_num_rows($rGetMenu) != 0)
{
return $rGetMenu;
}
else
{
return false;
}
}

Писать в конфиг конект к БД - ацко ппц.

0x22b
06.07.2008, 12:25
to FraiDex Хех, а так работает. Спс. Че то совсем мозги на бикрень, думаю больше об алгоритмической части. Но мне всеравно интересно почему не работало иначе. Так как значения переменных рекварились.

Ну вот с etc фактически одновременно отпостили.. Ок, понял спс.

FraiDex
06.07.2008, 12:35
потому, что функция не видет переменные $host, $login, $password, $db_name, так как они не глобальные.
как сделать их глобальными те etc написал немного выше. но лучше всего коннект прописывать в конфиге.

0x22b
06.07.2008, 12:40
Я зделал немного по другому.. config.php переименовал в db_fns.php
и там внес некоторые изменения.
db_fns.php

<?php
function db_connect()
{
$host = "localhost";
$login = "root";
$password = "";
$db_name = "cms";
$dbcon = mysql_pconnect($host, $login, $password) or die('База данных не доступна');
mysql_select_db($db_name);
}
?>
Думаю так будт лучше и удобнее. Всем огромное спасибо!

FraiDex
06.07.2008, 12:44
и зачем ты всё это зафигачил в функцию??? не вижу смысла

0x22b
06.07.2008, 12:46
и зачем ты всё это зафигачил в функцию??? не вижу смысла
mysql_pconnect() - откроет постоянный конект к БД, функцию db_connect вызываю всего один раз в get_menu(), а в остальных случая работаю с готовым соеденением.

etc
06.07.2008, 13:02
0x22b, маладетс, правильно мыслиш :)