Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> mysql_query i drugi parametr jako NULL
nospor
post 5.03.2013, 12:22:07
Post #1





Grupa: Moderatorzy
Postów: 36 557
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?




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

"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
 
Start new topic
Odpowiedzi (1 - 6)
Sephirus
post 5.03.2013, 12:32:00
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 smile.gif

Dobrze, że używam PDO... smile.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
nospor
post 5.03.2013, 12:35:47
Post #3





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




Oj, nie mieszajmy w to PDO. Nie o tym mowa 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 smile.gif


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

"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
Crozin
post 5.03.2013, 15:15:05
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 5.03.2013, 15:20:32
Post #5





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




No tak, to wyjaśnia czemu mamy błąd smile.gif
Ale przez tyle lat, to te ameby naprawdę mogły go poprawić 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ć smile.gif


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

"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
Crozin
post 5.03.2013, 15:31:57
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. wink.gif

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





Grupa: Moderatorzy
Postów: 36 557
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 % 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 wink.gif


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

"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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:01