проблема с mysql_num_rows

Don Arana

Новичок
проблема с mysql_num_rows

или со мной..:(

подскажите пожалуйста, что я делаю неправильно?

PHP:
$sql = "SELECT id, title, date, text, author, author_email FROM column_text WHERE id='$id'";
$result = mysql_query($sql);
$number = mysql_num_rows($result);
echo "<BR>число рядов = $number";
if (!$number==1) {
print "error!";exit;
}
$id = mysql_result($result,0,"id");
$subject = mysql_result($result,0,"title");
$date = mysql_result($result,0,"date");
$text = mysql_result($result,0,"text");
$author = mysql_result($result,0,"author");
$author_email = mysql_result($result,0,"author_email");
$text = nl2br($text);
echo "<br>Автор: <a href=mailto:$author_email>$author</a><BR>$date<br><b>$title</b><br>$text";
Скрипт при исполнении выдает - error! то есть, не в состоянии вернуть чилсо рядов в таблице базы. Как только убираю запись WHERE id='$id' - все начинает работать. Самое главное - что этот же скрипт у меня прекрасно работал в другом месте. С базой все ок. Есть таблица column_text, в ней 6 полей (id, title, date, text, author, author_email), вставлено два ряда с данными, правда даты у обоих рядов такого вида 0000-00-00 00:00:00, но я думаю, это неважно. Ну, и плюс 2 id (1 и 2 соответственно). Так в чем же дело?? Точнее, что же с id?? помогите пожалуйста (и не бейте если можно..:)
 

ONK

Пассивист PHPСluba
column_text надеюсь что это название таблици?

Первый раз вижу такой способ работы с результатом запроса, никогда бы не догадался :).

Что даёт echo "<BR>число рядов = $number"; ?
 

Don Arana

Новичок
column_text - название таблицы, да.


echo "<BR>число рядов = $number"; - выводит сообщение о количестве возвращенных рядов. При наличии текста WHERE id='$id' в запросе, выводит:

число рядов = 0error!


хорошо, вот по другому:

PHP:
$query = mysql_query("SELECT * FROM column_text WHERE id='$id'");
$rows = mysql_num_rows($query);
echo "<BR>число рядов = $rows";
if (!$rows==1) {
echo "error!";exit;
}
while($result = mysql_fetch_array($query))
{
$id = $result['id'];
$title = $result['title'];
$date = $result['date'];
$text = $result['text'];
$author = $result['author'];
$author_email = $result['author_email'];
$text = nl2br($text);

echo "<br>Автор: <a href=mailto:$author_email>$author</a><BR>$date<br><b>$title</b><br>$text";
}
опять таки, с наличием WHERE id='$id' все перестает работать. :(
 

ONK

Пассивист PHPСluba
Но сначало посмотри точно что отправляется северу баз данных

echo $SQL = "SELECT ... FROM ......";
mysql_query($SQL );


Тут какой-то простой баг...
 

Zh0rzh

Новичок
PHP:
if (!$rows==1) { 
echo "error!";exit; 
}
А это что за конструкция?
Может вернее будет так
PHP:
if ($rows!=1) { 
echo "error!";exit; 
}
 

woland

Guest
У тебя $id - число. Поэтому можно писать без кавычек: WHERE id=$id

>Может вернее будет так
Думаю, что $rows!=1 будет вернее.
 

Larson

Новичок
woland, не надо так делать - писать надо в кавычках, особенно то, что пришло от юзера.
Don Arana, у тебя ошибка, где-то здесь или выше - $sql = "SELECT id, title, date, text, author, author_email FROM column_text WHERE id='$id'";
Попробуй вручную поставить id - WHERE id = '1'. Так работает?
 

Don Arana

Новичок
Larson - когда ставлю id = '1', все работает..:(

Zhorzh - конструкцию поменял, ничего в принципе не изменилось.

PHP:
<?
$DBName = "column";
$DBHost = "localhost";
$DBPass = "";
$DBUser = "root";
mysql_connect($DBHost, $DBUser, $DBPass) or die("Couldn't connect");
mysql_select_db($DBName);
echo "Connected successfully!";

$query = mysql_query("SELECT * FROM column_text WHERE id='$id'");
$rows = mysql_num_rows($query);
echo mysql_error();
echo "<BR>число рядов = $rows";
if ($rows!=1) { 
echo "error!"; exit; 
}

while($result = mysql_fetch_array($query))
{
$id = $result['id'];
$title = $result['title'];
$date = $result['date'];
$text = $result['text'];
$author = $result['author'];
$author_email = $result['author_email'];
$text = nl2br($text);

echo "<br>Автор: <a href=mailto:$author_email>$author</a><BR>$date<br><b>$title</b><br>$text";
}
?>
вот, все застревает на участке $rows = mysql_num_rows($query);
не знаю, с базой все ок, сообщение о том, что присоединилось - выдается. Сообщения об ошибке (которое должно выдать mysql_error()) НЕ выдается кстати, а ошибка что рядов=0 выдается по прежнему..может я mysql_error() не туда вставил? Хотя вряд ли...
Пытался писать WHERE title='$title', не знаю зачем...но тоже не помогло.
 

alpes

Весь мир на ладони
PHP:
А это что за конструкция? 
Может вернее будет так[PHP]
if ($rows!=1) { 
echo "error!";exit; 
}
Нет, так мы будем пропускать только те результаты количество строк котороых равно 1! Он проверяет на то что бы было возвращено не 'ноль' строк, так пусть пишет:
PHP:
if(!$rows) { echo "error!";exit; }
 

alpes

Весь мир на ладони
Don Arana, у тебя проблема не смускулом, а с инициализацией переменной $id, вот и ищи где она у тебя теряется, не инициализируется, ...
 

Don Arana

Новичок
alpes - фишка не в этом!

строчка echo "<BR>число рядов = $rows";
которая выше чем if(!$rows) { echo "error!";exit; },
выдает что чило рядов = 0 а потом еще и пишет чего мы хотим - error!

все это происходит только тогда, когда есть текст WHERE id='$id'. когда его нет - все ок, но я не могу без него!!


alpes - извини, но не мог бы ты подсказать мне, глядя на полностью представленный выше участок кода, где же она теряется или где она не инициализируется, эта $id?

я только учусь и многого недопонимаю..
 

Larson

Новичок
Эх, register_globals - on, off?
Ты свой ид откуда берешь ? Из формы?
PHP:
" ... WHERE id = '" . $_POST['id'] . "'";
// или
" ... WHERE id = '" . $_GET['id'] . "'";
 

Don Arana

Новичок
Larson - register_globals - on

id ниоткуда не беру. Я просто хочу, чтобы выводилось содержимое таблицы в удобоваримом виде, и чтобы потом можно было выводить какой-либо один ряд из всей таблицы, по запросу его id.

может быть я что-то неправильно говорю, поправьте? :(
 

Larson

Новичок
Ну и чего ты тогда хочешь? Ты задал условие, в котором пишешь "хочу все записи, где ид=(ничего)". И что по твоему должно выбраться?
Что значит в удобоваримом варианте?
Выводи сначала все записи, а потом, если надо "поближе" рассмотреть конкретную запись ставь свое условие.
 

Don Arana

Новичок
Спасибо всем большое, решил задачку. Все просто. Надо было сделать после простого запроса SELECT * FROM column_text еще один, но уже с SELECT * FROM column_text WHERE id='$id'. Все работает замечательно - при обращении к скрипту без параметров - выводятся все ряды, при запросе конкретного id выводится только его ряд.

вот код:
PHP:
$query = mysql_query("SELECT * FROM column_text");
$rows = mysql_num_rows($query);
echo mysql_error();
echo "<BR>число рядов = $rows";
if(!$rows) { echo "error!";exit; }

$query = mysql_query("SELECT * FROM column_text WHERE id='$id'");
while($result = mysql_fetch_array($query))
{
$id = $result['id'];
$title = $result['title'];
$date = $result['date'];
$text = $result['text'];
$author = $result['author'];
$author_email = $result['author_email'];
$text = nl2br($text);

echo "<br>Автор: <a href=mailto:$author_email>$author</a><BR>$date<br><b>$title</b><br>$text";
}
 

alpes

Весь мир на ладони
Я уже ничего не доганяю, какие два запроса, ты сам то понимаешь что ты хочешь от своего скрипта? $id выставляешь, например хочешь вторую строку, то надо и прописать $id=2;
Например, ты открываешь свою страницу ссылкой http://MySaite/script.php?id=2 а в этом скрипте пишешь: $id=(int)$_GET["id"]; И тебе выведется строка с id=2. Так понятно?
 

alpes

Весь мир на ладони
По твоему коду, с комментом:
PHP:
//выбрать все строки с таблицы
$query = mysql_query("SELECT * FROM column_text"); 
//количество найденных строк (строк всего в таблице)
$rows = mysql_num_rows($query); 
//это здесь не нужно:
echo mysql_error(); 
//хочешь проверить выполнение запроса пиши так:
//if(!$query=mysql_query("SELECT * FROM column_text")) echo mysql_error();
echo "<BR>число рядов = $rows"; 
//если к-во строк в таблице ноль -> выйти
if(!$rows) { echo "error!";exit; } 
//еще похожий запрос, только надо выбрать строку, айди которой = $id, но переменная $id до этого места должна содержать какоето значение, прежде чем выполнить запрос!!!
$query = mysql_query("SELECT * FROM column_text WHERE id='$id'"); 
//собственно вывод того что нашли, хотя если id - ключевое поле то и цикла не нужно, ибо будет или ноль или одна строка результатов
while($result = mysql_fetch_array($query)) 
{ ... }
А теперь задумайся и ответь сам для себя - для чего ты выполнял то или иное действие! Во всем д.б. логика ;)
 

tony2001

TeaM PHPClub
>settype($id,"integer");
со строками тоже так будете?
проще поставить кавычки, чем каждый параметр приводить к типу.
кстати, есть еще $id + 0, (int)$id etc.
 
Сверху