Подскажите почему не могу вывести результат выполнения SELECT!!!!!

DUBECZ

Новичок
Есть таблица:

CREATE TABLE `questions` (
`key` mediumint(9) NOT NULL AUTO_INCREMENT,
`id` mediumint(9) NOT NULL,
`question` varchar(255) NOT NULL,
`response` varchar(255) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`status` tinyint(2) DEFAULT NULL,
PRIMARY KEY (`key`),
KEY `id` (`id`),
KEY `name_id` (`key`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;

Мне надо вывести только question и date. Я использую запрос:
PHP:
$name_question = mysql_query("SELECT * FROM questions WHERE key='".$_GET['id']."' AND id='".$_GET['user']."'");
                           //или mysql_query("SELECT question, date  FROM questions WHERE key='".$_GET['id']."' AND id='".$_GET['user']."'");  -тоже не работает

$n_question = mysql_fetch_array($name_question);
echo $n_question[0];
echo $n_question[1];
Но всегда получаю ответ: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in A:\home\localhost\www\MySocial\admin.php on line 22

Перепробовал и mysql_fetch_array() и mysql_fetch_assoc() одно и тоже вылазит!

В чем ошибка??
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
1. Что не понятно в описании ошибки?
2. Мануал имеет готовые примеры, где есть еще вызов функции mysql_query
3. Плюс ко всему надо выбирать только те поля, которые тебе нужны и юзать функцию mysql_fetch_assoc
 

DUBECZ

Новичок
Попробывал опять:
PHP:
		$name_question = mysql_query("SELECT * FROM questions WHERE key='".$_GET['id']."' AND id='".$_GET['user']."'");//

			$n_question =  mysql_fetch_assoc($name_question);
			echo $n_question['question'];
			echo $n_question['date'];
Такая же ошибка, но где?
 

Фанат

oncle terrible
Команда форума
в запросе.
чтобы ошибку увидеть, её надо запросить.
для этого надо писать осмысленный код, давай переменным нормальные имена, отражающие суть их содержимого.
PHP:
$query = SELECT * FROM questions WHERE key='".$_GET['id']."' AND id='".$_GET['user']."'"; // в этой переменной лежит SQL запрос
$result = mysql_query($query) or trigger_error(mysql_error()." ".$query); // а в этой - указатель на результат выполнения запроса. ник каким именам от отношения не имеет
$row   = mysql_fetch_row($result); // в этой переменной лежит строка из базы.
echo $row[0],$row[1];
Этот код является, во-первых, более осмысленным, а во-вторых, сообщит - какая именно ошибка произошла при выполнении запроса
 

DUBECZ

Новичок
Спасибо за подсказку! Но результат остался такой же:

Notice: 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 'key='6' AND id='16'' at line 1 SELECT * FROM questions WHERE key='6' AND id='16' in A:\home\localhost\www\MySocial\admin.php on line 25
[Денвер: показать возможную причину ошибки]
Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in A:\home\localhost\www\MySocial\admin.php on line 26

У меня запрос составлен верно? Или есть ли другой способ?
 

Фанат

oncle terrible
Команда форума
c0dex
ну, по правде сказать, действительно непонятно.
что это служебное слово - это ещё догадаться надо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Фанат
Ну я просто привык к тому, что интерпретатор запросов как правило ошибку показывает с того слова/места, где она имела место быть. Вот потому и подумал сразу про reserved =)
 

DUBECZ

Новичок
Если запрос неправельный, то какой может быть другой вариант?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
DUBECZ
Другого варианта нет, кроме как прочитать ошибку, перевести, потом прочитать ссылку, что я дал. Подумать, обязательно и понять, что слово key - зарезервированное в mysql. Пойти и почитать про эскейпинг имен полей.
 

Фанат

oncle terrible
Команда форума
c0dex
ключевое слово - "привык".
ожидать подобной привычки от человека, который запрос-то видит второй раз в жизни - наивно.

DUBECZ
http://phpfaq.ru/slashes
там и про искейпинг полей, и, самое главное - про искейпинг строк.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну ошибка "near что-то" как бы концентрирует внимание. Новички почему-то не умеют смотреть куда надо, а отчасти потому, что слабовато владеют английским.
 

Фанат

oncle terrible
Команда форума
c0dex
ошибка "near что-то" - самое тупое сообщение об ошибке в индустрии.
если человек в принципе не знаком с идеей ключевых слов, он никогда в жизни не поймет, в чем проблема.
Не надо приплетать свой опыт и переносить его на новичка.
 

DUBECZ

Новичок
Да я неопытен. Может потому что самоучка и иногда не могу смотреть сквозь пальцы, как некоторые.

Для того я и спрашиваю чтоб узнать нового!

А решение я нашел:
PHP:
	$name_question = mysql_query("SELECT * FROM questions WHERE id='".$_GET['id']."' AND id_user='".$_GET['user']."'");//
	$n_question =  mysql_fetch_assoc($name_question);
	echo $n_question['question'];
	echo $n_question['date'];
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Фанат
Спорить не нам о том, тупое оно или нет. Когда напишем свою бд, с блекджеком и шлюхами, вот тогда и будем думать, а пока... Едим, что дают)))

И мой опыт тут не при чем. Я не проецирую его на новичка, я дал конкретные ЦУ к действию. Слово key действительно не так просто заметить и понять, почему на нем интерпретатор застопорился, но там, в первую очередь, ошибка была другая.
 

DUBECZ

Новичок
Мне писать так легче и понятнее, а то много переменных становится и их трудно понимать. А на следующий день смотришь на них с широко открытыми глазами!
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
DUBECZ
Твой запрос должен выглядеть так:
PHP:
$query = "SELECT field1, field2 FROM questions WHERE key='".mysql_real_excape_string($_GET['id'])."' AND id='".mysql_real_excape_string($_GET['user'])."'";
Выбирать надо только те поля, которые ты будешь потом использовать в своем скрипте, они разделяются в выборке запятыми. Подставь в месте field1, field2 то, что тебе надо.

Зарезервированные слова, список которых я тебе дал по ссылке выше, необходимо эскейпить обратной кавычкой (обычно) и запрос будет:

PHP:
$query = "SELECT field1, field2 FROM questions WHERE `key`='".mysql_real_excape_string($_GET['id'])."' AND `id`='".mysql_real_excape_string($_GET['user'])."'";
Все, я все сказал.
 
Сверху