[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка Unable to save result
began
Получаю Cообщение:


Warning: mysql_query() [function.mysql-query]: Unable to save result set in /home/user/public_html/sitename.com/songs.php on line 107

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/user/public_html/sitename.com/songs.php on line 109

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/user/public_html/sitename.com/songs.php on line 255


То есть тут
on line 107 - FROM ". $table[1]);
on line 109 - $this->TableCount = mysql_result($result, 0);
on line 255 - if(mysql_num_rows($res))


В Таблице около 5 000 000 строк.

Использую такой Пагинатор для вывода из базы данных


<?php

/**
* Database server.
* Сервер БД.
*/

define('IRB_DBSERVER', 'localhost');

/**
* Database user.
* Пользователь БД
*/

define('IRB_DBUSER', '');

/**
* Database password.
* Пароль БД
*/

define('IRB_DBPASSWORD', '');

/**
* Database name.
* Название базы
*/

define('IRB_DATABASE', '');


/**
* Connection and installation of chaeset of connection
* Подключение и установка кодировок соединения
*/

$con=mysql_connect( IRB_DBSERVER, IRB_DBUSER, IRB_DBPASSWORD );
mysql_select_db( IRB_DATABASE);


/**
* IRB_Paginator - Class of division of the information on a paginal mode
* NOTE: Requires PHP version 5 or later
*
@package IRB_Paginator
*
@author IT studio IRBIS-team
*
@copyright © 2010 IRBIS-team
*
@version 0.1
*
@license http://www.opensource.org/licenses/rpl1.5.txt
*/

class IRB_Paginator
{
/////////////////////////////////////////////////
// PUBLIC
/////////////////////////////////////////////////

/**
* Establishes page number.
*
@var int
*/

public $NumPage = 1;
/**
* Establishes quantity of numbers.
*
@var int
*/

public $NumRows = 1;

/**
* Establishes quantity of columns.
*
@var int
*/

public $NumColumns = 1;

/////////////////////////////////////////////////
// PROPERTIES AND PRIVATE
////////////////////////////////////////////////

private $TableTotal = 0;
private $TableCount = 0;

/**
* Constructor
*
@param int $page
*
@param int $rows
*
@param int $columns
*/

public function __construct($page = 1, $rows = 1, $columns = 1)
{
if($rows > 1)
$this->NumPage = (int)$page;

if($rows > 1)
$this->NumRows = $rows;

if($columns > 1)
$this->NumColumns = $columns;
}

/**
* Operates a cache of difficult inquiries
*
@param string $query
*
@access public
*
@return void
*/

public function countQuery($query)
{

$query = str_replace("\n", " ", $query);
preg_match("#FROM(.+)#i", $query, $table);

$result = mysql_query("SELECT COUNT(*) AS `cnt`
FROM "
. $table[1]);

$this->TableCount = mysql_result($result, 0);

$res = mysql_query($query . $this->createLimit());

return $res;
}

/**
* Calculates a position and prepares a limit for inquiry
*
@param int $page
*
@access public
*
@return string
*/

public function createLimit()
{

$this->TableTotal = intval(($this->TableCount - $this->NumColumns) / $this->NumRows * $this->NumColumns) - 1;

if($this->NumPage < 1)
$this->NumPage = 1;

if(empty($this->TableTotal) || $this->TableTotal < $this->TableCount)
$this->TableTotal = $this->TableCount;

if($this->NumPage > $this->TableTotal)
$this->NumPage = $this->TableTotal;

$start = $this->NumPage * $this->NumRows * $this->NumColumns - $this->NumRows * $this->NumColumns;

if($start < 0)
$start = 0;

return ' LIMIT '. $start .', '. $this->NumRows * $this->NumColumns;

}


/**
* Generates the navigation menu
*
@access private
*
@return string
*/

function createMenu()
{

$count = ceil($this->TableTotal / $this->NumRows / $this->NumColumns);
$menu = "\n<!-- IRB_Paginator begin -->\n";

// Если страниц меньше 13, оставляем все по дефолту.
if($count < 13)
{
$i = 1;
$cnt = $count;
}
else
{

// Стрелочка на 10 влево
if($this->NumPage > 10)
$menu .= '<a href="songs-'. ($this->NumPage - 10) .'.html">-10<</a> ';

// Добавляем ссылки на две первые страницы
if($count > 12)
{
if($this->NumPage == 7)
$menu .= '<a href="songs.html">1</a> ';
elseif($this->NumPage == 8)
$menu .= '<a href="songs.html">1</a> <a href="songs-2.html">2</a> ';
elseif($this->NumPage > 7)
$menu .= '<a href="songs.html">1</a> <a href="songs-2.html">2</a> <b>...</b> ';
}


if($this->NumPage < 6)
{ // Если текущая страница в диапазоне от 1 до 5, выводим первые 10 ссылок
$i = 1;
$cnt = 10;
}
elseif($this->NumPage >= $count - 5)
{ // Если текущая страница на границе диапазона, или вышла за неё, показываем 10 последних
$i = $count - 10;
$cnt = $count;
}
else
{ // В ином случае показываем 11 ссылок: 5 слева от текущей, текущая, и 5 справа.
$i = $this->NumPage - 5;
$cnt = $count;
}

// Обрезаем ссылки
if($this->NumPage < 6)
$cnt = $i + 9;
elseif($count - $i > 10)
$cnt = $i + 10;

}

// Формируем меню
while($i <= $cnt)
{
if($i == $this->NumPage)
$menu .= '<b>'. $i .'</b> ';
else
$menu .= '<a href="songs-'. $i .'.html">'. $i .'</a> ';

$i++;
}

// Добавляем ссылки на две последние страницы
if($count > 12)
{
if($this->NumPage < $count - 6)
$menu .= ' <b>...</b> <a href="songs-'. ($count - 1) .'.html">'. ($count - 1) .'</a> ';

if($this->NumPage < $count - 5 && $count - $this->NumPage >= 10)
$menu .= '<a href="songs-'. $count .'.html">'. $count .'</a> ';
}

// Стрелочка на 10 вправо
$end = ($this->NumPage + 10 > $count)? $count : $this->NumPage + 10;

if($this->NumPage < $count - 5)
$menu .= ' <a href="songs-'. $end .'.html">>+10</a>';

return $menu ."\n\n<!-- IRB_Paginator end -->\n";
}
}


// Количество строк на странице
$num = 60;
// Принимаем номер требуемой страницы
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;

// Инициализируем объект
$paginator = new IRB_Paginator($page, $num);
// Запрос
$res = $paginator -> countQuery("SELECT * FROM mp3_Artists
INNER JOIN mp3_Albums ON mp3_Artists.ArtistID = mp3_Albums.ArtistID
INNER JOIN mp3_Tracks ON mp3_Tracks.AlbumID= mp3_Albums.AlbumID"
);

// Формируем меню
$menu = $paginator -> createMenu();

// Формируем вывод
$table = "<table width=\"50%\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n";

if(mysql_num_rows($res))
while($row = mysql_fetch_assoc($res))
{
$table .= "bla bla";
}

$table .= "</table>\n";

echo $table;
echo $menu;

mysql_close($con);

?>


Подскажите как испраить ошибку



Спустя 17 минут, 23 секунды (20.04.2011 - 20:03) Invis1ble написал(а):
began
попробуй выполнить запрос
REPAIR TABLE имя_таблицы EXTENDED


ПС. Сработает только для типа MyISAM

Спустя 14 минут, 44 секунды (20.04.2011 - 20:18) Renden написал(а):
began
Невижу чему у тя $table равен, такой переменной не существует(точнее массива):

preg_match("#FROM(.+)#i", $query, $table);
$result = mysql_query("SELECT COUNT(*) AS `cnt`FROM ". $table[1]);

Могу ошибатся но помоему нужно писать так:
if(mysql_num_rows($res))  {    
while($row = mysql_fetch_assoc($res))
{
$table .= "bla bla";
}
}


Спустя 7 минут, 38 секунд (20.04.2011 - 20:25) Invis1ble написал(а):
Renden
приглядись повнимательней, $table получается в результате работы preg_match() wink.gif

Спустя 11 минут, 51 секунда (20.04.2011 - 20:37) Renden написал(а):
Invis1ble
Хм если так, тогда прошу прощения, просто я всегда пишу так типа:
$table = preg_match("#FROM(.+)#i", $query, $table);
тк привык явно указывать чему равна переменая, чтож буду знать)

Спустя 4 минуты, 21 секунда (20.04.2011 - 20:42) Invis1ble написал(а):
Renden
в твоем варианте $table будет содержать число совпадений, а в том варианте в $table - само совпадение

Спустя 1 час, 38 минут, 6 секунд (20.04.2011 - 22:20) twin написал(а):
Такс. А вот виновник торжества.
Покажите плиз запрос, который был передан в класс.

Спустя 14 минут, 40 секунд (20.04.2011 - 22:34) Invis1ble написал(а):
twin
так ведь вот он, вроде как:
// Запрос 
$res = $paginator -> countQuery("SELECT * FROM mp3_Artists
INNER JOIN mp3_Albums ON mp3_Artists.ArtistID = mp3_Albums.ArtistID
INNER JOIN mp3_Tracks ON mp3_Tracks.AlbumID= mp3_Albums.AlbumID"
);

Спустя 7 дней, 17 часов, 14 минут, 25 секунд (28.04.2011 - 15:49) began написал(а):
подскажите как исправить ошибку. не только первых 10 ть страниц подгружаются и то очень медленно.

а потом ошибка

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/user/public_html/site.eu/mp3/conect/test/songs.php on line 253

то есть тут if(mysql_num_rows($res))


дополнительные индексы решат проблему ?

Спустя 5 минут, 51 секунда (28.04.2011 - 15:55) Invis1ble написал(а):
Причем тут индексы, у тебя подается в функцию mysql_num_rows невалидный идентификатор, а это происходит из-за того, что ты так и неисправил, по-видимому, первую ошибку.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.