Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





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

Posty w temacie


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: 14.10.2025 - 05:58