Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nieprawidłowe użycie mysql_fetch_array()
pytak2
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.07.2009

Ostrzeżenie: (0%)
-----


  1. <?php
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5.    <title>Jakaś testowa strona</title>
  6.    <meta http-equiv="content-type" content="text/html;charset=utf-8">
  7.    <link rel="stylesheet" type="text/css" href="style.css" media="all">
  8. </head>
  9. <body>
  10.    <div id="page">
  11.        <form method="get" action="index2.php">
  12.            <label>Wpisz zapytanie</label>
  13.            <input type="text" name="query">
  14.            <input type="submit" value="wykonaj zapytanie">
  15.        </form>
  16.    </div>
  17. </body>
  18. </html>
  19. ?>


  1. <?php  
  2.  
  3.    require_once('class.db.php');
  4.    
  5.    echo $_GET['query'];
  6.    
  7.    $obj=new database();
  8.    $sqlResult=$obj->_mysql_query($_GET['query']);
  9.    
  10.    echo $sqlResult;
  11.    
  12.    $aaa=$obj->_mysql_fetch_array($sqlResult);
  13.    
  14. ?>


  1. <?php
  2.  
  3. class database {
  4.    protected
  5.        $host=  'localhost',
  6.        $db=    'baza',
  7.        $login= 'root',
  8.        $pass=  '',
  9.        $error=array('Nie nawiązano połaczenia z bazą danych.',
  10.                     'Nie wybrano bazy danych.',
  11.                     'Nie udało się wykonać zapytania do bazy danych.',
  12.                     'Funkcja mysql_fetch_array() nie została wykonana.');
  13.    
  14.    public function __construct() {
  15.        @mysql_connect($this->host, $this->login, $this->pass) or die($this->error[0]);    
  16.        @mysql_select_db($this->db) or die($this->error[1]);        
  17.    }
  18.    
  19.    public function _mysql_query($query) {
  20.        return @mysql_query($query) or die($this->error[2]);
  21.    }
  22.    
  23.    public function _mysql_fetch_array($sqlResult) {
  24.        return @mysql_fetch_array($sqlResult) or die($this->error[3]);
  25.    }
  26. }
  27.  
  28. ?>

Jako wynik dostaję:
  1. <?php
  2. select * from tabela;1
  3. Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:ProgramyWAMPwwwclass.db.php on line 24
  4. Funkcja mysql_fetch_array() nie zostaĹ&#65533;a wykonana.
  5. ?>

Jak powinienem użyć powyższej funkcji?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2. public function _mysql_query($query) {
  3. $zm = mysql_query($query) or die($this->error[2]);      
  4. return $zm;
  5.   }
  6. ?>

przenosze. z obiektowką ma to sredni związek


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pytak2
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.07.2009

Ostrzeżenie: (0%)
-----


Przepraszam za zdublowanie tematu ale myślałem, że został usunięty mimo nie naruszenia regulaminu. Wracając do tematu. Jak powinna wyglądać metoda _mysql_fetch_array() żeby pobierała wyniki z bazy i umieszczała je w tablicy? A może trzeba coś innego zmodyfikować?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no analogicznie jak ci poprawilem mysql_query....

  1. <?php
  2. public function _mysql_fetch_array($sqlResult) {
  3.       $zm = mysql_fetch_array($sqlResult);
  4. return $zm;
  5.   }
  6. ?>

Wywalilem te die() bo akurat przy fetch bylo zbedne


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pytak2
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.07.2009

Ostrzeżenie: (0%)
-----


- Dlaczego zbędne?
- Dlaczego trzeba pisać:
  1. <?php
  2. $zm = @mysql_query($query) or die($this->error[2]);      
  3. return zm;
  4. ?>

i
  1. <?php
  2. $zm = mysql_fetch_array($sqlResult);
  3. return $zm;
  4. ?>

Zamiast:
  1. <?php
  2. return @mysql_query($query) or die($this->error[2])
  3. ?>

i
  1. <?php
  2. return mysql_fetch_array($sqlResult);
  3. ?>

Czym to sie różni i dlaczego pierwsze 2 zapisy działają drugie 2 już nie?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Dlaczego zbędne?
bo mysql_fetch_array ma prawo zwrocic false, gdy nie ma rekordow i die() tam nei moze byc, bo false w mysql_fetch_array() to prawidlowy stan. Co innego w mysql_query(). Tam false to blad wiec die( ) moze byc

Cytat
Dlaczego trzeba pisać:
Chodzi o kolejnosc wykonywania operatorow

dla
return cos or cos
zostanie najpierw wykonane cos or cos i wynik tego zwrocony. czyli zawsze to bedzie wartosc logiczna. w twoim przypadku oczekiwales wyniku mysql_query a nie wartosci logicznej, wiec musiales dac to przed return, gdyz
$zm = cos or cos
najpierw wykona sie $zm = cos a dopiero potem, gdy $zm bedzie false, wykona sie or cos

Troche zawile, ale banalne winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pytak2
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.07.2009

Ostrzeżenie: (0%)
-----


To wcale nie jest zawiłe. Bardzo dobrze to wytlumaczyleś. Czyli reasumując (trochę po Twojemu) jeżeli używam warunku logicznego to muszę rezultat przypisać do zmiennej a potem ją zwrócić a gdy go nie ma to już nie trzeba przypisywać do zmiennej tylko od razu zwrócić wwynik? Jak powinno wyglądać poprawne wywołanie metody _mysql_fetch_array() i pobranie danych z bazy w pliku index2.php?

Ten post edytował pytak2 20.07.2009, 22:44:56
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
To wcale nie jest zawiłe. Bardzo dobrze to wytlumaczyleś. Czyli reasumując (trochę po Twojemu) jeżeli używam warunku logicznego to muszę rezultat przypisać do zmiennej a potem ją zwrócić a gdy go nie ma to już nie trzeba przypisywać do zmiennej tylko od razu zwrócić wwynik?
Jakbym dobrze wytlumaczyl to bys nie pytal ponownie o to samo winksmiley.jpg
.. or die( ) sluzy do przerwania aplikacji i wywalenia bledu na ekran, gdy mysql_query() zwroci false. Nie mozna tej konstrukcji dac w return, bo jak mowilem, return potraktuje cale to wyrazenie jako warunek logiczny i zwroci nam wynik logiczny a nie wynik mysql_query.
Ta sama konstrukcja przy przypisywaniu do zmiennej daje to, ze najpierw jest przypisanie do zmiennej wyniku mysql_query, a dopiero potem jesli mysql_query dalo false, wykonanie "or die()"

Cytat
Jak powinno wyglądać poprawne wywołanie metody _mysql_fetch_array() i pobranie danych z bazy w pliku index2.php?
Bardzo podobnie do tego napisanego w manualu smile.gif
http://pl.php.net/manual/pl/function.mysql-fetch-array.php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pytak2
post
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.07.2009

Ostrzeżenie: (0%)
-----


Cytat("nospor")
Jakbym dobrze wytlumaczyl to bys nie pytal ponownie o to samo winksmiley.jpg
.. or die( ) sluzy do przerwania aplikacji i wywalenia bledu na ekran, gdy mysql_query() zwroci false. Nie mozna tej konstrukcji dac w return, bo jak mowilem, return potraktuje cale to wyrazenie jako warunek logiczny i zwroci nam wynik logiczny a nie wynik mysql_query.
Ta sama konstrukcja przy przypisywaniu do zmiennej daje to, ze najpierw jest przypisanie do zmiennej wyniku mysql_query, a dopiero potem jesli mysql_query dalo false, wykonanie "or die()"

Pytalem dla pewności ale teraz już jestem pewny.

Cytat("nospor")
Bardzo podobnie do tego napisanego w manualu smile.gif
http://pl.php.net/manual/pl/function.mysql-fetch-array.php

Zrobilem tak:
  1. <?php
  2. $obj=new database();    
  3.    
  4.    $result = $obj->_mysql_query($_GET['query']);
  5.    
  6.    while ($row = mysql_fetch_array($result)) {
  7.        echo $row[0], $row[1], $row[2];
  8.        echo "<br>";
  9.    }
  10.    mysql_free_result($result);
  11. ?>

- Według Ciebie dobrze czy źle?
- Po co jest to mysql_free_result() ?
- Za pomocą return zwracam zmienną $sqlResult
  1. <?php
  2. public function _mysql_query($query) {
  3.        $sqlResult = @mysql_query($query) or die($this->error[2]);      
  4.        return $sqlResult;
  5.      }
  6. ?>

To później mimo wszystko podczas wywołania tej metody muszę przypisać jej rezultat do zmiennej:
  1. <?php
  2. $result = $obj->_mysql_query($_GET['query']);
  3. ?>

Dlazego?
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Według Ciebie dobrze czy źle?
A dziala? No to dobrze winksmiley.jpg
A powaznie: no źle. Skoro masz mysql_fetch_array() w obiekcie to masz korzystac z tego z obiektu smile.gif

Cytat
Po co jest to mysql_free_result()
A po co jest manual w ktorym to jest napisane?

Cytat
Za pomocą return zwracam zmienną $sqlResult.To później mimo wszystko podczas wywołania tej metody muszę przypisać jej rezultat do zmienne.Dlaczego?
Bo nie zapisales tej zmiennej jako wlasciwosci klasy no i musisz ją gdziesz trzymac. mysql_fetch_array() wymaga tej zmiennej


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 20:19