Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> mysql_query i drugi parametr jako NULL
nospor
post
Post #1





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




A tak mnie naszło na refleksje pod wpływem jednego tematu na forum.

A więc mamy mysql_query()
http://pl1.php.net/manual/en/function.mysql-query.php
Jako drugi parametr może przyjąć uchwyt połączenia, ale można nic podawać i wówczas domyślnie wg. dokumentacji jest null
resource mysql_query ( string $query [, resource $link_identifier = NULL ] )
Czyli mozna napisać tak:
mysql_query($sql)
ale można też tak
mysql_query($sql, $link)

No ale skoro domyślnie to jest null, więc teoretycznie można napisać też tak:
mysql_query($sql, null)
lub
mysql_query($sql, $link) gdzie $link to null.

No ale okazuje się, że tak nie można. Jak już podajemy drugi parametr to musi on być linkiem. Nie może być nullem. A wydawać by się mogło na zdrowy rozsądek, że jeśli sami ręcznie wpiszemy to co jest wartością domyślną, to mysql_query powinno się zachować dokładnie tak samo, jakby samo tę wartość domyślną ustaliło.

Co Wy na to?


Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Śledziłem tamten temat i szczerze mówiąc tak myślałem że autor coś tam podawał... ale samo to, że jest to tak a nie inaczej jest co najmniej - nieoczekiwane (IMG:style_emoticons/default/smile.gif)

Dobrze, że używam PDO... (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #3





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




Oj, nie mieszajmy w to PDO. Nie o tym mowa (IMG:style_emoticons/default/smile.gif)

Chodzi mi o samo zachowanie zdawać by się mogło banalnej funkcji... No ale cieszy mnie fakt, że nie tylko mnie to dziwi (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Przepraszam, ża określenie, ale deweloperzy PHP czasami przypominają niedorozwiniętą amebę i na prawdę nie potrafią zrobić najprostszych rzeczy dobrze. Fragment źródła funkcji mysql_query:
  1. zval *mysql_link = NULL;
  2. ...
  3.  
  4. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|r", &query, &query_len, &mysql_link) == FAILURE) {
  5. return;
  6. }
  7.  
  8. if (!mysql_link) {
  9. id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
  10. CHECK_LINK(id);
  11. }
Jaki jest błąd? Zmienna mysql_link będzie NULL-em wyłącznie w przypadku, gdy w ogóle nie podamy parametru dla mysql_query(). W przypadku gdy podamy go (o wartości NULL) zmienna mysql_link będzie już stukturą zval, która ma przypisany PHP-owski typ NULL. Innymi słowy w IFie powinno być coś na kształt:
  1. if(!mysql_link || Z_TYPE_P(mysql_link) == IS_NULL) { ... }
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




No tak, to wyjaśnia czemu mamy błąd (IMG:style_emoticons/default/smile.gif)
Ale przez tyle lat, to te ameby naprawdę mogły go poprawić (IMG:style_emoticons/default/wink.gif)

Chyba że zrobili to celowo, tu zaś skolei nasuwa się pytanie po co? No ale podejrzewam, że to już ich trzeba się pytać (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jedyny powód jaki mogę znaleźć to to, że zend_parse_parameters() z jakiegoś bliżej nieokreślonego powodu nie może/nie potrafi PHP-owskiego NULLa wczytać do struktury zval, dla której przewidziano typ RESOURCE. Ale tutaj powinni w takim przypadku w dokumentacji podać dwie sygnatury funkcji, gdzie jedna oczekuje połączenia (nie NULLa), a druga w ogóle nie przyjmuje parametru połączenia (tak jak jest to zrobione w przypadku np. pg_query).

...jednak czego można się spodziewać po amebie. (IMG:style_emoticons/default/wink.gif)

Ten post edytował Crozin 5.03.2013, 15:32:11
Go to the top of the page
+Quote Post
nospor
post
Post #7





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




Cytat
...jednak czego można się spodziewać po amebie.
I ta konkluzja myślę wyczerpuje temat w 100 % (IMG:style_emoticons/default/smile.gif)

Dziękuję Crozin, Twoja dociekliwość była jak zwykle nieoceniona. W ramach nagrody dostajesz miesiąc praktyk u ameb.... albo to one dostaną praktyki u Ciebie... Podejrzewam, że im i nam wyszła by na lepsze ta druga opcja (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.10.2025 - 19:29