Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in
 
 автор: Footer   (16.07.2007 в 20:24)   письмо автору
 
 

Делаю так:

session_start();
include "config.php";
mysql_query ("USE users");
    $name = $_SESSION ['name'];
    $password = $_SESSION ['password'];
          echo $name;
    $query = mysql_query ("SELECT * FROM register WHERE name = '${name}' ");
    $ath = mysql_query ($query);
    if (mysql_num_rows ($ath) == 0)
    {
    exit ("Ошибка базы данных");
    }
    else
   {
    echo "<table>";
    while (list ($id_user, $name, $email, $date) = mysql_fetch_row ($query))
    {
        echo "<tr>
        <td>${name}</td>
        </tr>
        <tr>
        <td>$email</td>
        </tr>";
    }
        echo "</table>";


При помощи этого скрипта хочу найти в базе данных в таблице в столбце name имя пользователя, которое берётся из сессии. В сессию имя пользователя записывается при регистрации. А потом хочу по найденному имени пользователя выводить всю информацию о нём ($email, $date и т.д. много разных данных). Но у меня не получается. Всё время выводится в браузер: "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in
Ошибка базы данных".

   
 
 автор: Trianon   (16.07.2007 в 20:31)   письмо автору
 
   для: Footer   (16.07.2007 в 20:24)
 

измените строку с запросом так:

$ath = mysql_query ($query) or die("Error in $query : ". mysql_error());

   
 
 автор: Footer   (16.07.2007 в 21:01)   письмо автору
 
   для: Trianon   (16.07.2007 в 20:31)
 

Пишет: "Error in Resource id #7 : 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 'Resource id #7' at line 1"
У меня id в таблице идёт не попорядку. Идёт что-то типа: 1, 2, 3, 7, 8, 9, и т.д. Просто до этого записи из таблицы удалялись. Не понимаю, почему не работает.

   
 
 автор: Trianon   (16.07.2007 в 21:06)   письмо автору
 
   для: Footer   (16.07.2007 в 21:01)
 

>Пишет: "Error in Resource id #7 : 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 'Resource id #7' at line 1"

Значит в запрос у Вас подставляется не строка с именем, а что-то другое.
echo $name выдает имя нормально?

Между прочим, почему не написать просто

$query = mysql_query ("SELECT * FROM register WHERE name = '$name' "); 

безо всяких фигурных скобок?

>У меня id в таблице идёт не попорядку.
Ничего страшного. Он и не должен идти по порядку.

   
 
 автор: Footer   (16.07.2007 в 21:18)   письмо автору
 
   для: Trianon   (16.07.2007 в 21:06)
 

Да, echo $name выдает имя нормально. Попробовал без фигурных скобок сделать запрос, но эффект тотже. Как думаете, в чём дело? Подставил вместо $name имя пользователя, всё равно пишет тоже самое.

   
 
 автор: Trianon   (16.07.2007 в 21:28)   письмо автору
 
   для: Footer   (16.07.2007 в 21:18)
 


 $query = mysql_query ("SELECT * FROM register WHERE name = '${name}' "); 
    $ath = mysql_query ($query); 

Явно один из вызовов - лишний. Отсюда и беда.

   
 
 автор: Footer   (16.07.2007 в 21:36)   письмо автору
 
   для: Trianon   (16.07.2007 в 21:28)
 

Просто я думаю, ничего, что я пользюсь циклом while? Ведь в результате запроса должна быть получена только одна строка. И, если не использовать $ath = mysql_query ($query); , то как же тогда проверить выполнился запрос или нет? Или, в данном случае, можно обойтись без проверки

    $ath = mysql_query ($query); 
    if (mysql_num_rows ($ath) == 0) 
    { 
    exit ("Ошибка базы данных"); 
    }
?

   
 
 автор: cheops   (16.07.2007 в 22:00)   письмо автору
 
   для: Footer   (16.07.2007 в 21:36)
 

Trianon говорит, что вы дескриптор, полученный от одной функции mysql_query() передаёте другой функции mysql_query() - это не правильно, функция mysql_query() может принимать только строку-запрос, дескриптор запроса она принимать не может - поэтому один из вызовов mysql_query() лишний.

   
 
 автор: cheops   (16.07.2007 в 22:03)   письмо автору
 
   для: Footer   (16.07.2007 в 21:36)
 

Отсутствие соответствия запросу записи является ошибочным? Или вы хотите получить ошибку, которую возвращает MySQL-сервер? В любом случае проверку лучше осуществлять с участием функции mysql_error()
<?php
  $query 
"SELECT * FROM register WHERE name = '${name}' ";
  
$ath mysql_query ($query);  
  if(!
$ath) exit("Ошибка базы данных ".mysql_error());
  if (
mysql_num_rows ($ath) == 0)  
  {  
    exit (
"В базе данных отсуствуют записи, соответствующие запросу");  
  }
?>

   
 
 автор: Footer   (16.07.2007 в 22:35)   письмо автору
 
   для: cheops   (16.07.2007 в 22:03)
 

Спасибо, всё заработало! Понял ошибку. Исправил. Только вот никак не пойму другого. Не хочет держаться сессия. При авторизации имя пользователя и пароль записываются в сессию. Сначала всё нормально и страница грузится как нужно. То есть отображается информация о пользователе, читаемая из базы данных. Но при обновлении этой страницы, вместо информации о пользователе отображается форма авторизации. Не пойму, почему имя пользователя не сохраняется в сессию.
Тот скрипт, что выводит информацию о пользователе инклюдируется в index.php. В этом файле есть такой код:

<?php
session_start
();
    
$name $_SESSION ['name'];
    
$password $_SESSION ['password'];
if (!
$name)
{
include (
"form.html");
}
else
{
include (
"user_info.php");
}
?>

user_info.php, выводящий инофрмацию о пользователе, как раз и приведён выше. Что тут не так? Никак не разберусь.

   
 
 автор: Trianon   (16.07.2007 в 23:52)   письмо автору
 
   для: Footer   (16.07.2007 в 22:35)
 

>user_info.php, выводящий инофрмацию о пользователе, как раз и приведён выше. Что тут не так?

Вы повторно вызываете session_start()?

   
 
 автор: Footer   (17.07.2007 в 17:19)   письмо автору
 
   для: Trianon   (16.07.2007 в 23:52)
 

Ага. Сейчас попробую исправить.

   
 
 автор: Footer   (17.07.2007 в 21:02)   письмо автору
 
   для: Footer   (17.07.2007 в 17:19)
 

Всё заработало! Всем спасибо огромное! =)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования