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

Тема в разделе "PHP", создана пользователем parks, 11 май 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    421
    Симпатии:
    42
    Ситуация такова :)
    Есть запрос который выберает все записи в которых поле 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 ...... а хотелось бы чтобы было "заметок по данной категории необнаружено" или то то в этом роде :)
     
  2. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    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"]);
        }
    }
     
    parks нравится это.
  3. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    421
    Симпатии:
    42
    ((((
    Если нет категории почти таже ошибка
    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
     
  4. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Ошибка говорит о том, что переменная $start равняется -3, что естественно приводит к ошибке...
     
    parks нравится это.
  5. Yozik

    Yozik

    Регистр.:
    5 дек 2007
    Сообщения:
    239
    Симпатии:
    65
    Функция 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>";
    }
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Не надо забывать, что функция 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>"
    }
    }  
     
  7. Dima Kos

    Dima Kos Постоялец

    Регистр.:
    1 апр 2010
    Сообщения:
    54
    Симпатии:
    6
    если нужно просто не выводить ошибку то поставьте знак "@" перед каждой функцией...
     
  8. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Блин, ну вы с ума посходили. Какие проверки? Какое 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() у нас объявлено в первой строчке, т.е. это всегда по-любому будет массив. Просто иногда пустой :)
     
Статус темы:
Закрыта.