Если нет строки с такой колонкой MySQL

Статус
В этой теме нельзя размещать новые ответы.

parks

Постоялец
Регистрация
18 Сен 2008
Сообщения
439
Реакции
100
Ситуация такова :)
Есть запрос который выберает все записи в которых поле cat = $cat
PHP:
$tables = mysql_query("SELECT * FROM content WHERE cat='$cat' ORDER BY id LIMIT $start, $num  ") ;
$myrow = mysql_fetch_array ($tables);
Затем в цикле табличкой его выводит
PHP:
do {
printf (" <table algin='center' class='tables'>
	<tr>
		<td class='tables_title'> <p align='center'> <a href='fool.php?id=%s'> %s </a> </td>
	</tr>
	<tr>
		<td>&nbsp;</td>
	</tr>
</table><br>
",$myrow["id"], $myrow["title"] );
}
while ($myrow = mysql_fetch_array ($tables));
Проблема заключается в том что, если $cat = к примеру 8 , и не одна строчка в базе неимеет значение cat 8 , вылазит ошибка Warning: mysql_fetch_array(:( supplied argument is not a valid MySQL result resource in ...... а хотелось бы чтобы было "заметок по данной категории необнаружено" или то то в этом роде :)
 
mysql_num_rows

Добавлено через 17 минут
Если в лом самому читать про эту функцию, то вот готовое решение.
PHP:
$tables = mysql_query("SELECT * FROM content WHERE cat='$cat' ORDER BY id LIMIT $start, $num  ");
if (mysql_num_rows($tables)>0) {
    while ($myrow = mysql_fetch_array($tables)) {
        printf(" <table algin='center' class='tables'><tr><td class='tables_title'> <p align='center'> <a href='fool.php?id=%s'> %s </a> </td></tr><tr><td>&nbsp;</td></tr></table><br>", $myrow["id"], $myrow["title"]);
    }
}
 
mysql_num_rows
Добавлено через 17 минут
Если в лом самому читать про эту функцию, то вот готовое решение.
PHP:
$tables = mysql_query("SELECT * FROM content WHERE cat='$cat' ORDER BY id LIMIT $start, $num  ");
if (mysql_num_rows($tables)>0) {
    while ($myrow = mysql_fetch_array($tables)) {
        printf(" <table algin='center' class='tables'><tr><td class='tables_title'> <p align='center'> <a href='fool.php?id=%s'> %s </a> </td></tr><tr><td>&nbsp;</td></tr></table><br>", $myrow["id"], $myrow["title"]);
    }
}
((((
Если нет категории почти таже ошибка
Warning: mysql_num_rows(:( supplied argument is not a valid MySQL result resource in Z:\home\192.168.1.63\www\content.php on line 76
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 '-3, 3' at line 1
 
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 '-3, 3' at line 1
Ошибка говорит о том, что переменная $start равняется -3, что естественно приводит к ошибке...
 
Функция do..while здесь, как минимум неуместна.

Тогда уж как-нибудь так:
PHP:
if($cat){
$tables = mysql_query("SELECT * FROM content WHERE cat='$cat' ORDER BY id LIMIT $start, $num  ") ;
 
echo " <table algin='center' class='tables'>";

while ($myrow = mysql_fetch_array ($tables)) {
echo "<tr>
        <td class='tables_title'> <p align='center'> <a href='fool.php?id=".$myrow['id']."'>".$myrow['title']."</a> </td>
    </tr>
    <tr>
        <td>&nbsp;</td>
    </tr>";
}  
echo "</table>";
}
 
Не надо забывать, что функция mysql_query можеть вернуть false Вместо resource, поэтому нужно сделать дополнительную проверку. Также лишняя информация нам ни к чему, поэтому заменяем mysql_fetch_array на mysql_fetch_assoc:
PHP:
if($cat){ 
$tables = mysql_query("SELECT * FROM content WHERE cat='$cat' ORDER BY id LIMIT $start, $num"); 
if(is_resource($tables))
{  
echo " <table algin='center' class='tables'>"; 

while ($myrow = mysql_fetch_assoc($tables)) { 
echo "<tr> 
        <td class='tables_title'> <p align='center'> <a href='fool.php?id=".$myrow['id']."'>".$myrow['title']."</a> </td> 
    </tr> 
    <tr> 
        <td>&nbsp;</td> 
    </tr>"; 
}   
echo "</table>"; 
}
}
 
если нужно просто не выводить ошибку то поставьте знак "@" перед каждой функцией...
 
Блин, ну вы с ума посходили. Какие проверки? Какое mysql_num_rows?

Если в таблице нету записей с cat=8, то mysql_query отлично работает, и возвращает вполне себе валидный resource id. И по нему вполне штатно потом извлекается 0 записей, удовлетворяющих селекту. Т.е. ошибка не там, явно.

По ложному пути пошли, понаразводили уже версий.. :)

Вот такой вот код всегда будет работать, не зависимо от того, есть ли в базе записи или нету.
PHP:
$rows = array();
$query = "SELECT * FROM cats WHERE cat_id='$cat'";
$res = mysql_query($query);
while($arr = mysql_fetch_array($res)) $rows[] = $arr;
// ...

echo "<table><tr><th>Name<th>ID</tr>\n";
if (is_array($rows)) foreach($rows as $arr) {
     echo "<tr><td>$arr[name]<td>$arr[cat_id]</tr>\n"; 
}
echo "</table>\n";

Единственная проверка ошибок здесь - if is_array(). Ее вполне можно не делать, потому что $rows=array() у нас объявлено в первой строчке, т.е. это всегда по-любому будет массив. Просто иногда пустой :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху