witam,

przeszukałem internet i znalazłem wiele wątków dotyczących problemu z błędem składni, #1064.
Ten jest jednak inny.

Mam zapytanie:

  1. INSERT INTO `handel_kup` (`id`, `kto`, `co`, `ile`, `cena`, `time`) VALUES
  2. (handel_id(1002, 4, 388), 1002, 4, 1, 4, 388),
  3. (handel_id(1002, 20, 388), 1002, 20, 1, 5, 388)
  4. ON DUPLICATE KEY UPDATE `ile`=`ile`+VALUES(`ile`), `cena`=`cena`+VALUES(`cena`)


które wykonuję z polecenia:

  1. echo "<u>\n{$polecenie}</u>";
  2. $quer = mysql_query($polecenie);
  3. echo "\n<u style=\"color: red; background: pink\"><b>Error #" . mysql_errno() . ":</b>\n" . mysql_error() . "</u>\n";


na ekranie pojawia mi się napis:

INSERT INTO `handel_kup` (`id`, `kto`, `co`, `ile`, `cena`, `time`) VALUES
(handel_id(1002, 4, 388), 1002, 4, 1, 4, 388),
(handel_id(1002, 20, 388), 1002, 20, 1, 5, 388)
ON DUPLICATE KEY UPDATE `ile`=`ile`+VALUES(`ile`), `cena`=`cena`+VALUES(`cena`)
Error #1064:
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 '' at line 3


no ok. jest jakiś błąd.

Kopiuje polecenie i wklejam do phpmyadmin.
Tam, to samo polecenie, działa bez zarzutu.

Jak to możliwe?
Czemu to samo polecenie działa w phpmyadmin, a nie działa ze stronki?

proszę o pomoc



używam
Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
Wersja klienta bazy danych: libmysql - mysqlnd 5.0.10 - 20111026




PS

jeżeli obetnę ostatnią linijkę i zostawię
  1. INSERT INTO `handel_kup` (`id`, `kto`, `co`, `ile`, `cena`, `time`) VALUES
  2. (handel_id(1002, 4, 388), 1002, 4, 1, 4, 388),
  3. (handel_id(1002, 20, 388), 1002, 20, 1, 5, 388)


czyli bez

  1. ON DUPLICATE KEY UPDATE `ile`=`ile`+VALUES(`ile`), `cena`=`cena`+VALUES(`cena`)


działa... no ale nie o to chodzi.

aktualizacja:


EUREKA!!!!

ZNALAZŁEM BŁĄD!!!

otóż tworząc zmienną $polecenie używałem m.in.:

  1. $polecenie [strlen($polecenie )-1] = NULL;


nie wiem czemu, ale ten sposób na ucięcie ostatniego elementu stringu gryzie się z poleceniem mysql.
Jeżeli zamiast niego użyję

  1. $polecenie = substr($polecenie , 0, -1);


wtedy wszystko działa!

w phpmyadmin mi polecenie działało, gdyż przekopiowałem tekst i go wklejałem.
widocznie skopiowany tekst to coś innego niż string $polecenie z tym samym tekstem, lecz z wartościami z NULL... ktoś mi jest w stanie wytłumaczyć dlaczego? smile.gif

pozdr.!