Autor Zpráva
anonymníí
Profil *
Ahoj,

přecházím z mysql na mysqli, kde používám objektový přístup namísto procedurálního. Mám však nějaké nejasnosti a nevím, jak si je vysvětlit.

$result = $mysqli->query('dotaz');
echo $mysqli->error; // zde alternativa za mysql_error(), bez zavorek
$result->num_rows; // zde alt. za mysql_num_rows(), bez zavorek
while ($r = $result->fetch_assoc()) // alt. za mysqli_fetch_assoc(), se zavorkami

Dotaz je na základě zvýraznění asi jasný. Proč se v mysqli některé mysql funkce nahrazují zápisem se závorkami a jiné zápisem bez závorek? Jsem z toho zmaten, vysvětlení jsem nenašel.

Logické by mi přišlo, kdyby se psalo $r->num_rows(), nebo $r->fetch_assoc.

Děkuji.
Fisir
Profil
Reaguji na anonymníího:
Pokud tam závorky nejsou, značí to proměnnou. Pokud ano, značí to funkci.

$mysqli->error // proměnná s informací o chybě
$result->num_rows // proměnná s počtem vrácených řádků dotazu
$result->fetch_assoc() // funkce pro získání výsledků dotazu
anonymníí
Profil *
Fisir:
Ale proč? V mysql jsou všechno funkce, potřeboval bych pochopit, proč je to v objektově pojatém mysqli vzaté takhle. Logické by bylo mít funkci, která počet řádků vrátí, nikoliv proměnnou.

Stejnou logikou by pak mohla být proměnná (resp. rovnou pole) i místo fetch_assoc().

A smířit se s tím, že to tak prostě je, to se mi nechce :-) Nějaké bližší vysvětlení, proč a jak? Nějaká skrytá logika?
Fisir
Profil
Reaguji na anonymníího:
Chceš hodnotu, proto proměnná (u procedurálního přístupu je to i v MySQLi funkce, protože není jiná možnost, jak se k té hodnotě dostat). Spíš je logické, že dotaz rovnou vrátí nějaké informace, právě ve formě proměnných. Funkce fetch_assoc() ti vrátí do pole jeden řádek. Pokud chceš další, musíš ji zavolat znovu. Volat proměnnou nejde, takže bys neměl jak z dotazu vypreparovat více řádků.

Používám zde pro zjednodušení termín „proměnné“, podle správné terminologie jsou to „vlastnosti“.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0