Добрый день. Проблемма такая
Код
$descr=0;
echo("До ".$descr);
$descr = @mysql_connect("my_site.com","user","pass") or exit();
echo("<br> после коннекта ".$descr);
mysql_select_db("child") or exit;
$result_id=0;
echo("<br> result До ".$result_id);
$result_id = mysql_query("SELECT COUNT(*) FROM child");
echo("<br>result после ".$result_id);
$row= mysql_fetch_row($result_id);Дамп
До 0
после коннекта Resource id #5
result До 0
result после
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\Program Files\nusphere\phped\Projects\de-bill\index.php on line 23В чем тут дело ?
К слову сказать, хочу еще спросить, как создать аккаунт для пользователя.
Скажу сразу что пользователь реально есть с консоли я захожу в mysql, на него сделанны такие привелегии GRANT ALL ON bd.* TO 'user'@'%';
Пароля на этой учетке вобще я ни делал, т.к это тестовый вариант.
В чем тут проблема ? Кстати есть такой нюанс. С консоли войдя под этим пользователем набрав use my_db; выходит ошибка ERROR 1044: Access denied for user: '@localhost' to database 'my_db'.
Вот впринципе вся проблема. Как с ней бороться я незнаю.
Заранее благодарен Заикин Максим Викторович.
Для начала, вдумчиво читаем http://www.phpclub.ru/detail/article/2000-11-21
>Для начала, вдумчиво читаем http://www.phpclub.ru/detail/article/2000-11-21Аж бесит. Ты сам вдумчиво пачитай этц фигню што ты мне дал, патом мой вапрос и код проанализируй. Ты это дай детям из дец сада. Я спросил в чем проблема, а не что мне прочитать. Что касается литературы это фуфельная статья, лично я использую Поль Дюбуа - mysql второое издание, и еще пару книг конкретно по пхп. Ламо ! Иногда лучше молчать чем говорить. Лучшип ты ничиво ниписал, я просто потратил свое время на бесполезное чтение того что и бес этава реса знал.
Сынок, сначала поменяй подгузники, потом научиcь орфографии и только после этого переходи к программированию, чтению умных книжек, а заодно научись общаться с людьми, к которым ты пришел за помощью. Твой код - бред сивой кобылы, мне все равно какие ты читаешь книжки. В голове, видимо, ничего не откладывается. Судя по всему, ты не умеешь элементарно отлаживать код. Ответь хотя бы на пару вопросов, даже не мне, а сам себе:
1. Зачем ты делаешь echo("<br> после коннекта ".$descr);?
2. Зачем ты используешь оператор @ перед mysql_connect?
3. Тебе известна функция mysql_error?
4. Ты проверил свой запрос в консоли mysql или phpMyAdmin?
Вынужден признать, люди правы в чём-то, давая Вам ответы Выше... займитесь нормально отладкой. Я же хочу высказаться по поводу прав доступа. Дело в том, что в MySQL есть разница между тем локальный вы пользователь или пришли из вне (из сети). У вас выставлены права на пользователя из сети
GRANT ALL ON bd.* TO 'user'@'%';
Знак процентов на это и указывает, если Вы сделаете тоже самое, но со значением localhost
GRANT ALL ON db.* TO 'user@localhost';
то у Вас всё заработает. Кстати, попробуйте сконнектится со своей базой в текущем состоянии не используя localhost, а пропишите IP машины - тоже должно срабоать.По поводу Вашего скрипта - проведите нормальную отладку, вот приблизительный пример кода
$db_name = "child";
$con = @mysql_connect("my_site.com","user","pass") or die("Can not connect to db ".mysql_error());
mysql_select_db($db_name) or die("Can not connect to db ".mysql_error());
$res = mysql_query("SELECT COUNT(*) FROM child");
if($res){
$row = mysql_fetch_row($result_id);
if(!$row){
echo mysql_error();
exit;
}
}Я не претендую на то что этот код верен во всех отношениях, но я бы начал именно так.
Я себе давно уже сделал такой класс (в какой то книжке нашел) и юзаю его ... Намного проще жить =)Что то типа
$db = new DB($host, $user, $password, $database);
if (!$db->open()) die($db->error());
if (!$db->query("
SELECT * FROM `table`
")) die($db->error());
if ($db->numRows() == 0 ) {
...
} else {
...
}Ну и так далее ...
<?
class DB
{
/* Установки соединения */
var $host = '';
var $user = '';
var $password = '';
var $database = '';
var $persistent = false;
/* Идентификатор соединения */
var $conn = NULL;
/* Результат поиска */
var $result = false;
function DB($host, $user, $password, $database, $persistent = false)
{
$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->database = $database;
$this->persistent = $persistent;
}
function open()
{
/* Выбор нужной функции */
if ($this->persistent) {
$func = 'mysql_pconnect';
} else {
$func = 'mysql_connect';
}
/* Соединение с сервером */
$this->conn = $func($this->host, $this->user, $this->password);
if (!$this->conn) {
return false;
}
/* Выбор нужной базы */
if (@!mysql_select_db($this->database, $this->conn)) {
return false;
}
return true;
}function close()
{
/* Закрытие соединения */
return(@mysql_close($this->conn));
}function error()
{
/* Возврат ошибки */
return (mysql_error());
}function query($sql)
{
/* Запрос к базе */
$this->result = @mysql_query($sql, $this->conn);
return($this->result != false);
}function affectedRows()
{
/* Затронутые столбцы */
return(@mysql_affected_rows($this->conn));
}function numRows()
{
/* Количество столбцов */
return(@mysql_num_rows($this->result));
}function fetchObject()
{
/* Вернуть обьект */
return(@mysql_fetch_object($this->result, MYSQL_ASSOC));
}function fetchArray()
{
/* Вернуть массив */
return(@mysql_fetch_array($this->result));
}function fetchAssoc()
{
/* Возвращает ассоциативный массив */
return(@mysql_fetch_assoc($this->result));
}function InsertId ()
{
return(@mysql_insert_id($this->conn));
}
function freeResult()
{
/* Освободить ресурс */
return(@mysql_free_result($this->result));
}
}
?>