O PHP, MySQL a plácnutí do čela

Původně jsem měl v plánu napsat nějaký opravdu poučný a hodnotný příspěvek. Návštěvnost by se zvýšila o 1000% a spisovatelé by se mi klaněli tak hluboko, jak jen by to šlo. Byl by to článek, který by změnil svět, nebo tak něco.

Já se na to ale vykašlal a napsal tohle.

Určitě se vám někdy stalo, že jste potřebovali vypsat pomocí PHP z databáze nějaká data způsobem podobným tomuto:

mysql_query("SELECT * FROM tabulka WHERE jmeno=$jmeno")

Že ne? Zkuste to. Tento zdánlivě logický a syntakticky správný dotaz má jednu chybu – nefunguje. Přesněji řečeno vyhazuje naprosto nelogický a nesmyslný error podobný tomuto:

Unknown column ‘Obsah proměnné $jmeno’ in ‘where clause’

Cože? Kde se nám vzal sloupec v databázi se stejným názvem jako hodnota naší proměnné? A proč neexistuje? Skoro bych řekl, že tenhle bug je vložený schválně. Asi aby odradil nováčky a otravoval experty. Nebo to může být dávno zapomenutý vtípek, nicméně to je velmi diskutabilní. Podobně, jako nás ve škole učili, že je nejdřív třeba vypočítat to, co je v závorkách, tak otrlí programátoři vědí, že proměnné se v takovýchto případech uzavírají do uvozovek.

mysql_query("SELECT * FROM tabulka WHERE jmeno='$jmeno'")

Já myslel, že mě to snad zabije, půl dne hledání chyby, upravování a zálohování databáze… Ale nakonec jsem se jen plácl do čela. Silně.

A co jako?

Já vím, mí bystří čtenáři. Je to jen moje drobná nápověda pro příští programování. Tak ten zbytek alespoň naplním nějakým relevantním obsahem.

Víte, že programování v PHP je obecně spojováno s tímto hudebním klipem? Je to skvělá metafora na jeho první verze (zejména do příchodu verze 3), ovšem od doby, kdy se v PHP začaly objevovat objekty, už přestává být aktuální, no posuďte sami.