[php & mysql] Klasy w php

0

Mam taką klasę w pliku classes.php

<?php
class BazaSQL
{
       var $SQL_query_count;
       var $SQL_connection;
       function OpenConnection( $Host, $User, $Pass ) {
                $this->SQL_connection = mysql_connect( $Host, $User, $Pass) or die( mysql_error() );
       }
       function SelectDB( $Database ) {
              mysql_select_db( $Database, $this->SQL_connection ) or die( mysql_error() );
       }
       function Query( $text ) {
              return mysql_query( $test, $this->SQL_connection ) or die( mysql_error() );
              $this->SQL_query_cout++;
       }
       function QueryCount() {
              return $this->SQL_query_count;
       }       
};
?>

i w pliku engine.php chę ją zastosować:

<?php
       require_once("classes.php");
       $BSQL = new BazaSQL;
       $BSQL->OpenConnection( "localhost", "root", "" );
       $BSQL->SelectDB( "db" );
       $result = $BSQL->Query( "SELECT * FROM news ORDER BY news_id DESC" );
       while( $row = mysql_fetch_array( $result, MYSQL_BOTH ) )
       {
              echo $row['news_id'].": ".$row['bews_data']." - ".$row['news_body']." | ".$row['news_author']."\n<br>";
       }
       echo "\n\n".$BSQL->QueryCount();
?>

i dostaje taki error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

który czepia się wiersza

while( $row = mysql_fetch_array( $result, MYSQL_BOTH ) )

. Co ja robię źle i dlaczego to nie chce działać??

Pozdrawiam...d[AvE]

0

Reszta wyglada wmiarę dobrze, ale jak sam zuważyłeś nie pasuje ta jedna linijka. Najprawdopodobniej dlatego, że użyłeś złego parametru.

while( $row = mysql_fetch_array( $result, MYSQL_BOTH ) )

Funckja mysql_fetch_array(), ma domyślnie jeden argument, rezultat zapytania. Nie wiem po co zastosowałeś drugi, jeśli miało to jakiś cel to napisz, może da się inaczej do tego dojść.

0

Funckja mysql_fetch_array(), ma domyślnie jeden argument, rezultat zapytania. Nie wiem po co zastosowałeś drugi, jeśli miało to jakiś cel to napisz, może da się inaczej do tego dojść.

To jest z php.net ściągnięte. Dzięki MYSQL_BOTH mogę zastosować taką składnie:

while( $row = mysql_fetch_array( $result, MYSQL_BOTH ) ) {
  echo $row['nazwa_pola_w_tabeli'];
}

jest różnica poniędzy:

while( $row = mysql_fetch_array( $result, MYSQL_BOTH ) ) {
  echo $row[0];
}

pozdrawiam...d[AvE]

[ DOPISANE ]:
Dokładny opis masz tutaj:
http://www.php.net/manual/pl/function.mysql-fetch-array.php

0

przydało by się sprawdzić, czy wynik zapytania nie jest aby pusty:

$result = $BSQL->Query( "SELECT * FROM news ORDER BY news_id DESC");
if ($result && $result !== true)
{
  while( $row = mysql_fetch_array( $result, MYSQL_BOTH ) )
  {}

}
0

Może i tak jest w manualu, ale sprawdz bez czy istnieje taka zmienna :] i co? :p No właśnie przydało by sie sprawdzić czy są jakieś rekordy i czy zapytanie zostało poprawnie wykonane.

0

Znalazłem błąd przez, który to nie chciało działać:

 function Query( $text ) {
                     return mysql_query( $test, $this->SQL_connection ) or die( mysql_error() );
                     $this->SQL_query_cout++;
          }

Zamiast $text spisałem $test [wstyd] [wstyd] mała literówka a ile kłopotów...
Buga znalazłem dzięki temu co powiedział ŁF:

$result = $BSQL->Query( "SELECT * FROM news ORDER BY news_id DESC");
if ($result && $result !== true)
{
   while( $row = mysql_fetch_array( $result, MYSQL_BOTH ) )
   {}

}

za co serdecznie dziękuję!!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.