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
попробуй выполнить запрос
ПС. Сработает только для типа MyISAM
попробуй выполнить запрос
REPAIR TABLE имя_таблицы EXTENDED
ПС. Сработает только для типа MyISAM
Спустя 14 минут, 44 секунды (20.04.2011 - 20:18) Renden написал(а):
began
Невижу чему у тя $table равен, такой переменной не существует(точнее массива):
Могу ошибатся но помоему нужно писать так:
Невижу чему у тя $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()
приглядись повнимательней, $table получается в результате работы preg_match()
Спустя 11 минут, 51 секунда (20.04.2011 - 20:37) Renden написал(а):
Invis1ble
Хм если так, тогда прошу прощения, просто я всегда пишу так типа:
$table = preg_match("#FROM(.+)#i", $query, $table);
тк привык явно указывать чему равна переменая, чтож буду знать)
Хм если так, тогда прошу прощения, просто я всегда пишу так типа:
$table = preg_match("#FROM(.+)#i", $query, $table);
тк привык явно указывать чему равна переменая, чтож буду знать)
Спустя 4 минуты, 21 секунда (20.04.2011 - 20:42) Invis1ble написал(а):
Renden
в твоем варианте $table будет содержать число совпадений, а в том варианте в $table - само совпадение
в твоем варианте $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 невалидный идентификатор, а это происходит из-за того, что ты так и неисправил, по-видимому, первую ошибку.