|
|
|
| Подскажите пожалуйста почему появляется ошибка указаная ниже?
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/ottobocks/www_1/content/htdocs/catalog.php on line 407
При чем в строке 407 находится код PHP <?php while($d=mysql_fetch_array($r)) { ?>
Я один к одному перелил сайт и базу на сервер в инете. Главное это все работает у
меня на виртуальном сервере на компе дома и на хосте от AGAVA.RU тоже без проблем все крутится. | |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 09:19)
| | $r не содержит дескриптора результсета.
Обычно это является причиной того, что запрос $r=mysql_query(...) завершился неудачно.
Код запроса Вы не привели. | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2007 в 09:31)
| | Вот этот код. Причем я понимаю эта ошибка вылазила на других хостах, но чего нужно тут, я не пойму.
if(!isset($_GET['category'])){
$r=mysql_query("SELECT * FROM catalog WHERE hidezapis=0 ORDER BY `artikul` ASC");}else{
if(isset($_GET['under_category'])){
$under_category=$_GET['under_category'];
$category=$_GET['category'];
$r=mysql_query("SELECT * FROM catalog WHERE id<9000 AND category='$category' AND under_category='$under_category' AND hidezapis=0 ORDER BY `artikul` ASC");
}else{
$category=$_GET['category'];
$r=mysql_query("SELECT * FROM catalog WHERE id<9000 AND category='$category' AND hidezapis=0 ORDER BY `artikul` ASC");
}
}
|
| |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 09:38)
| | Чем гадать, посмотрите, из-за чего запрос отвергается.
if(!$r) echo mysql_error();
|
Заодно выведите текст запроса:
mysql_query($sql = "SELECT ......");
....
if(!$r) echo "Error in $sql : ".mysql_error();
|
| |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 09:19)
| | Абсолютно верно, добавлю только догадку, что регистры имен таблиц и полей в ЗАПРОСЕ несоответствуют регистрам имен таблиц и полей в БАЗЕ - такое оч. часто бывает =)... особенно, когда локально стоит Вынь, а хостинг на Юнихе =). Приведите в соответствие регистры - вполне вероятно, что все заработает =). | |
|
|
|
|
|
|
|
для: ZuArt
(07.02.2007 в 09:36)
| | верно!!! Хост это на юниксе. Как это лечить господа? Я уже весь мозг сломал. ;-(( | |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 09:39)
| | может есть ограничение на длину имени поля в юниксах? | |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 09:41)
| | Еще бы дамп используемых таблиц сюда для полного счастья =) именно в том виде, в котором он заливался на сервак хостера.
Кстать когда идет if с вложенными if-ами в секции else лучше использовать else if - понятнее код + обработка побыстрее идет...
if(!isset($_GET['category']))
{
$r=mysql_query("SELECT * FROM catalog WHERE hidezapis=0 ORDER BY `artikul` ASC");
}
else if (isset($_GET['under_category']))
{
$under_category=$_GET['under_category'];
$category=$_GET['category'];
$r=mysql_query("SELECT * FROM catalog WHERE id<9000 AND category='$category' AND under_category='$under_category' AND hidezapis=0 ORDER BY `artikul` ASC");
}
else
{
$category=$_GET['category'];
$r=mysql_query("SELECT * FROM catalog WHERE id<9000 AND category='$category' AND hidezapis=0 ORDER BY `artikul` ASC");
}
|
ну и рискну предложить в условии не $r находить, а просто составлять sql-запрос в переменную, а уж $r=mysql_query(...) после всех условий узать - попроще отлаживать + сам получившийся запрос можно вывести на экран (аля if(isset($DEBUG)) echo $sql;) и посмотреть на него на предмет синтаксических ошибок =) | |
|
|
|
|
|
|
|
для: ZuArt
(07.02.2007 в 09:48)
| | вы это имели ввиду?
-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Фев 07 2007 г., 13:00
-- Версия сервера: 4.1.8
-- Версия PHP: 4.4.0
--
-- БД: `rt9_rtto`
--
-- --------------------------------------------------------
--
-- Структура таблицы `catalog`
--
CREATE TABLE `catalog` (
`id` int(11) NOT NULL auto_increment,
`name` tinytext NOT NULL,
`summary` longtext,
`text` longtext,
`money` int(11) default NULL,
`img` tinytext,
`category` tinytext,
`under_category` tinytext,
`hidezapis` int(1) default '0',
`hidepodrobno` int(1) default '0',
`hidezakaz` int(1) default '0',
`artikul` int(6) default '0',
`zakaz_podrobno` int(1) default NULL,
`razmer_min` int(3) default NULL,
`razmer_max` int(3) default NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM;
--
-- Дамп данных таблицы `catalog`
-- | |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 10:01)
| | Хммм... попробуйте заменить код на такой...
$sql = "";
if(!isset($_GET['category']))
{
$sql = "SELECT * FROM catalog WHERE hidezapis=0 ORDER BY `artikul` ASC";
}
else if (isset($_GET['under_category']))
{
$under_category=$_GET['under_category'];
$category=$_GET['category'];
$sql = "SELECT * FROM catalog WHERE id<9000 AND category='$category' AND under_category='$under_category' AND hidezapis=0 ORDER BY `artikul` ASC";
}
else
{
$category=$_GET['category'];
$sql = "SELECT * FROM catalog WHERE id<9000 AND category='$category' AND hidezapis=0 ORDER BY `artikul` ASC";
}
echo "<pre>".$sql."</pre>";
|
и посмотреть, что выводится на экран при различных вариантах - есть подозрение, что в построенном запросе есть какая-то ошибка... может быть не подставляются значения вместо $under_category или $category при построении запроса =(. | |
|
|
|
|
|
|
|
для: ZuArt
(07.02.2007 в 10:06)
| | Получается вот этот запрос выполняется хорошо
SELECT * FROM catalog WHERE hidezapis=0 ORDER BY `artikul` ASC
вот этот запрос выполняется с ошибкой
SELECT * FROM catalog WHERE id <9000 AND category = 'category3' AND under_category = '11'
AND hidezapis =0 ORDER BY `artikul` ASC LIMIT 0 , 30
Ответ MySQL:
#1267 - Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (utf8_unicode_ci,COERCIBLE) for operation '='
Вот этот запрос исполняется также с той же ошибкой
SELECT * FROM catalog WHERE id<9000 AND category='category3' AND hidezapis=0 ORDER BY `artikul` ASC | |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 10:25)
| | Похоже, что скрипт у Вас работает в кодировке win1251 , а дамп залит в кодировке utf8 - вот отсюда и растут ноги...
попробуйте перезалить дамп, только выберите в MyAdmin кодировку cp1251_general_ci - возможно она там фигурирует как русская Windows или Windows Cyrilic | |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 10:25)
| | А это уже следствие криво проимпортированной базы данных (либо некорректно настроенного соединения с сервером).
Кодировка запроса у Вас не совпадает с кодировкой данных в таблицах. Как следствие, не совпадают алгоритмы сопоставления строк и сервер ругается, что ему не понять, как сравнивать строки в запросе со строками в таблице. | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2007 в 10:30)
| | Ребята, я нашел решение проблемы
ошибки 1267 из документации mySQL, она возникает на серверах mySQL от 4.1.2 до 4.1.7 включительно из-за неправильной интерпретации некоторых символов. Нужно юзать Мускул версией выше. Причем этот сервер MySQL имеет версию 4.1.7 к сожалению. А остальные, где нет ошибки, имеют версию выше. Вот и все.
Всем спасибо за участие!! Очень помогли!! | |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 10:38)
| | нзчт... но импортнуть бд в другой кодировке все-таки попробуйте =) не может быть такого, что на серваке хостера стоит версия мускула, в которой ВСЕ не пашет =))) | |
|
|
|
|
|
|
|
для: ZuArt
(07.02.2007 в 10:41)
| | хорошо, попробую.
Я так понимаю ниже указанные переменные character set client и character set results можно изменить программно? Или проще базу перелить в кодировке utf8 ?
character set client utf8
(Глобальное значение) cp1251
character set connection cp1251
character set database cp1251
character set results utf8
(Глобальное значение) cp1251 | |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 11:04)
| | Базу лучше перезалить =) - это и проще и надежнее в нужной кодировке... Только не соображу, в какой она сейчас залита? | |
|
|
|
|
|
|
|
для: ZuArt
(07.02.2007 в 11:08)
| | решение простое получилось!! Я в таблице поменял кодировку сравнения на utf8_general_ci у полей текстового типа и все заработало и стало отображаться!!! | |
|
|
|
|
|
|
|
для: Alex Boxgorn
(07.02.2007 в 11:15)
| | поздравляю ;)
что и требовалось доказать, что скрипт работает с кодировкой utf8, а база в win1251...
Стоит пересмотреть все таблицы и их текстовые поля, в противном случае можете опять на грабли наступить ;) | |
|
|
|
|
|
|
|
для: ZuArt
(07.02.2007 в 11:17)
| | Спасибо Уважаемые за помощь!!! Я учту ваши замечания.
Сколько с mySQL работаю ни разу не попадал на эти грабли. ;-) | |
|
|
|