Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Newsletter w php i MySQL - mysql_query
#1
Kod PHP:
<?php
$host 
"localhost";
$username "root";
$password ".....";
$database "test";
$connect = @mysql_connect($host$username$password) or die (@mysql_error());
$selectdb = @mysql_select_db($database$connect) or die (@mysql_error());


if(isset(
$_POST['submit'])){
    
$email $_POST['email'];
    
if(
mysql_query("SELECT email FROM newsletters WHERE email = '$email'")){    
    echo 
"Podany email ".$email." istnieje w newsleterze";
}
else{
    if(empty(
$email)){
        echo 
"Podaj swój adres email!";
        }
    else{
        
            @
mysql_query("INSERT INTO newsletters SET     email='$email'");
            echo 
"Dziękujemy za zapisanie się w newsletterze";            
        }
    }    
}

?>

Mam taki kodzik. Chciałem się dowiedzieć dokładnie jak działa mysql_query();
Przeszukałem manual itd. ,ale nadal nie wiem za bardzo.

Dokładnie chodzi o ten moment:

Kod PHP:
if(mysql_query("SELECT email FROM newsletters WHERE email = '$email'")){    
    echo 
"Podany email ".$email." istnieje w newsleterze"
Wszystko ładnie działa, ale zacząłem sobie testować i zamieniłem to na taki kod:
Kod PHP:
if(mysql_query("SELECT email FROM newsletters WHERE email = '$email'")){    
    echo 
mysql_query("SELECT email FROM newsletters WHERE email = '$email'")); 

Jeśli tak zrobię to echo drukuje mi "Resource id #5"

Może mi ktoś wytłumaczyć dlaczego zwraca coś takiego i w takim razie jeśli to zwraca Resource id #5 to jak if na to reaguje, że zwraca true i wykonuje blok instrukcji?
Pomogłem? To daj plusa Cool
Odpowiedz
#2
Słabo czytałeś ten manual:
Cytat: For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.

For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.

The returned result resource should be passed to mysql_fetch_array(), and other functions for dealing with result tables, to access the returned data.

Use mysql_num_rows() to find out how many rows were returned for a SELECT statement or mysql_affected_rows() to find out how many rows were affected by a DELETE, INSERT, REPLACE, or UPDATE statement.

mysql_query() will also fail and return FALSE if the user does not have permission to access the table(s) referenced by the query.
Patrz zwłaszcza pierwszy i drugi akapit.

(20-07-2012, 19:50)Moody napisał(a): Jeśli tak zrobię to echo drukuje mi "Resource id #5"
No a co ma drukować?

(20-07-2012, 19:50)Moody napisał(a): Może mi ktoś wytłumaczyć dlaczego zwraca coś takiego i w takim razie jeśli to zwraca Resource id #5 to jak if na to reaguje, że zwraca true i wykonuje blok instrukcji?
Bo czytacie ten manual i nie rozumiecie. Funkcja ta zwróci Ci true w przypadku jeśli zapytanie zostanie WYKONANE, a false w innym razie. Rezultat nie ma najmniejszego znaczenia. Ona Ci, w przypadku wykonania zapytania, zwraca resource, po którym to musisz przejechać funkcją mysql_fetch_assoc() czy też mysql_fetch_array().
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#3
No dobra, a od czego zależy to co mi wyskoczyło. Czemu resource id #5 a nie np. 2? Chodzi mi o to skąd to się bierze?
Pomogłem? To daj plusa Cool
Odpowiedz
#4
Nie rozumiem pytania.

Funkcja zwraca identyfikator zasobów (w tym przypadku SQL), a co ma wg Ciebie zwrócić?

Czytaj:
http://www.php.net/manual/pl/language.types.resource.php
http://www.php.net/manual/pl/function.get-resource-type.php
http://www.php.net/manual/pl/function.is-resource.php
http://php.net/manual/pl/resource.php
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#5
No dlaczego resource id# 5, a nie np. 3

I jak ten zasób wygląda, skoro inne funkcje potrafią go przetworzyć na to by w końcu wyświetlić właściwe dane.
Pomogłem? To daj plusa Cool
Odpowiedz
#6
Poczytaj o typach zmiennych, bo ich nie łapiesz.

To tak jakbyś pytał dlaczego funkcja x() zwraca false, a nie null.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#7
No planuje kupić książkę i się tego poduczyć, ale zastanawiałem się robiąc newsletter to poki nie mam ksiazki to chcialem tutaj zapytac.

Mam nadzieje, że to nie był problem Wink Dzięki.
Pomogłem? To daj plusa Cool
Odpowiedz
#8
No przestań, od tego jest forum Smile

Manual Twoim najlepszym przyjacielem, książki często są.. hmm.. przeterminowane.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#9
Żeby już nie zakładać osobnego tematu. W takim razie jaką książkę byś polecił taka co jest aktualna Smile ?
Pomogłem? To daj plusa Cool
Odpowiedz
#10
(24-07-2012, 16:32)Moody napisał(a): Żeby już nie zakładać osobnego tematu. W takim razie jaką książkę byś polecił taka co jest aktualna Smile ?
A jakbyś określił swoją znajomość PHP? OOP? Wtedy Ci coś poszukam. Tylko, że mogę Ci polecić coś anglojęzycznego - polskich książek programistycznych nie czytuję.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Jak sprawdzić czy adres www znajduje sie w bazie mysql? jarekcda 8 9,062 13-05-2017, 01:02
Ostatni post: miketodson255
  Optymalizacja MySQL-a tomek_00 1 3,933 01-09-2013, 13:31
Ostatni post: hieroshima
  [MySQL] Struktura bazy dla słownika msx83 2 3,934 24-08-2013, 16:26
Ostatni post: msx83
  Komunikacja PHP z MySQL na serwerze pawstrze 5 6,461 16-07-2013, 15:58
Ostatni post: Engine
  [MySQL] wyszukiwarka problem darlowiak 3 3,566 13-06-2013, 12:58
Ostatni post: darlowiak

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości
Sponsorzy i przyjaciele
SeoHost.pl