Autor Zpráva
Matěj Hofman
Profil
Dobrý den, prosím o radu.
Potřebuji na z webu získat zápis o přeposlání bodů mezi uživateli.
Zápis vypadá takto:

$insert2 = mysql_query("INSERT INTO `sendcredit`(`from`, `to`, `amount`, `date`, `note`, `id`) VALUES ([$user_name],[$komu],[$kolik],[$date],[$poznamka],['1']) ") or die(mysql_error());

Zkoušel jsem už spoustu variant a žádná nešla.
Vyhodí mi to následunící chybu:


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[user1],[user2],[10],[08/03/2015 13:02:23],[note],['1'])' at line 1

Poraďte prosím, kde mám hledat chybu, díky.
lionel messi
Profil
Matěj Hofman:
Zmaž hranaté zátvorky okolo vkladaných dát. Reťazce sa v SQL ohraničujú apostrofmi, čísla, dátumy a pod. ničím. Čiže takto:

$insert2 = mysql_query("INSERT INTO `sendcredit`(`from`, `to`, `amount`, `date`, `note`, `id`) VALUES ('$user_name', '$komu', $kolik, $date, '$poznamka', 1) ") or die(mysql_error());
mimochodec
Profil
lionel messi:
dátumy a pod. ničím

Nejsem si jist, ale myslím, že datum se bez obalení apostrofy neobejde. Navíc mysql nejspíš nesežere formát "08/03/2015 13:02:23", který se Matěj Hofman snaží použít. Volil bych tvar '2004-12-31 12:00:00'.
Matěj Hofman
Profil
Díky za rady :)
Ten formát data je v pořádku, funguje to, jak psal lionel messi , jen jsem ještě dal prázdné uvozovky u "id".
Kubo2
Profil
mimochodec:
Navíc mysql nejspíš nesežere formát "08/03/2015 13:02:23", který se Matěj Hofman snaží použít. Volil bych tvar '2004-12-31 12:00:00'.

Pre malé uvedenie do obrazu by som doporučoval si prečítať Časové a dátumové literály v MySQL a Standard SQL.
mimochodec
Profil
Kubo2:
Pre malé uvedenie do obrazu by som doporučoval

No vida. Je pravda aspoň to, co jsem psal o těch apostrofech?
Kubo2
Profil
mimochodec:
Je pravda aspoň to, co jsem psal o těch apostrofech?

Zľahka som to testoval a výsledok je nasledovný:

• formát času HH:MM:SS je v SQL syntakticky inkorektný, takže sa čas bez apostrofov nezaobíde (resp. je možný alternatívny zápis číselného literálu HHMMSS),
• formát dátumu v tvare YYYY-MM-DD sa vyhodnotí ako matematický rozdiel čísla YYYY a čísel MM a DD, pričom skončí runtime chybou ako pokus o vloženie neplatného číselného literálu, takže opäť v prípade dátumu je nutné použiť apostrofy alebo alternatívny zápis číselného literálu YYYYMMDD,
• formát časodátumu (datetime) je syntakticky vlastne len kombináciou predchádzajúcich dvoch formátov, pričom skončí syntaktickou chybou pri HH:MM:SS ešte v čase kompilácie.

Takže v konečnom dôsledku je tvoje tvrdenie o nutnosti uzavretia časových resp. dátumových literálov do reťazcov správne, až na výnimku pri použití alternatívy v podobe číselného literálu.
mimochodec
Profil
Kubo2:
Děkuju. Neměl jsem to otestováno.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0