Przemysław Szczerbicki

Przemysław Szczerbicki Programista,
freelancer

Temat: Problem z insertem

Witam,

Mam taki fragment w schema.yml:

order:
id: ~
user_id: { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true }
company_id: { type: integer, required: true, foreignTable: sf_guard_user, foreignReference: id }

W wygenerowanym formularzu nie mogę dodać niestety żadnego nowego obiektu tego typu. Dostaję taki błąd:

Unable to execute INSERT statement. [wrapped: SQLSTATE[42000]: Syntax error or access violation: 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 'order (`ID`,`USER_ID`,`COMPANY_ID`) VALUES (NULL,6,9)' at line 1]

Kolumna ID faktycznie jest w bazie jako auto increment, pola istnieją i nie wiem co jest źle
Używam Propela i symfony 1.2

Zauwazyłem, że MySQL tego zapytania też nie przyjmuje, natomaist sam generuje takie:

INSERT INTO `order` (`id`, `user_id`, `company_id`) VALUES (NULL, '4', '2');


Skąd te cudzysłowy dla liczb? Pola user_id i company_id są typu int.

pzdr.
Roman Piekarski

Roman Piekarski Programista do
wynajęcia

Temat: Problem z insertem

Przemysław Szczerbicki:
Witam,

Mam taki fragment w schema.yml:

order:
id: ~
user_id: { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true }
company_id: { type: integer, required: true, foreignTable: sf_guard_user, foreignReference: id }

W wygenerowanym formularzu nie mogę dodać niestety żadnego nowego obiektu tego typu. Dostaję taki błąd:

Unable to execute INSERT statement. [wrapped: SQLSTATE[42000]: Syntax error or access violation: 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 'order (`ID`,`USER_ID`,`COMPANY_ID`) VALUES (NULL,6,9)' at line 1]

Kolumna ID faktycznie jest w bazie jako auto increment, pola istnieją i nie wiem co jest źle
Używam Propela i symfony 1.2

Zauwazyłem, że MySQL tego zapytania też nie przyjmuje, natomaist sam generuje takie:

INSERT INTO `order` (`id`, `user_id`, `company_id`) VALUES (NULL, '4', '2');

Skąd te cudzysłowy dla liczb? Pola user_id i company_id są typu int.

pzdr.

Wzuc swoje zapytanie bezposrednio do konsoli mysql i od razu bedziesz wiedzial o co chodzi.
Generalnie to autoincrement powinien zalanczac sie dopiero, gdy nie podajesz wartosci id a ty ja wlasnie podajesz z tad blad.
Prawdopodobnie problem lezy po stronie kodu ktory stworzyles. Wklej swoj kod genrujacy to zapytanie.
Przemysław Szczerbicki

Przemysław Szczerbicki Programista,
freelancer

Temat: Problem z insertem

To jest kod wygenerowany poprzez propel:build-all na podstawie schema.yml
Ale dlaczego mysql nie przyjmuje zapytania bez cudzysłowu?

MySQL nigdy nie pluł mi się przy podawaniu NULL jako wartości auto increment i działało to poprawnie. Co więcej jak wlepiłem teraz zapytanie w phpMyAdmin:

INSERT INTO `order` (`id`, `user_id`, `company_id`) VALUES (NULL, 4, 2);

To zadziałało. Na tej samej instancji MySQL, dodanie rekordu poprzez formularz w symfony rzuca błędem:

Unable to execute INSERT statement. [wrapped: SQLSTATE[42000]: Syntax error or access violation: 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 'order (`ID`,`USER_ID`,`COMPANY_ID`) VALUES (NULL,1,2)' at line 1]

Napisałeś, że autoincrement nie powinien mieć podawanej wartości - tutaj symfony mi generuje. Bład w schema? Będę wdzięczny za podpowiedź bo patrzę to już kilka dni i nie widzę.

pzdr.
Michał Płonka

Michał Płonka Programista PHP

Temat: Problem z insertem

Przemysław Szczerbicki:Syntax error or access violation: 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 'order(`ID`,`USER_ID`,`COMPANY_ID`) VALUES (NULL,1,2)' at line 1
Hmmm, nie widzę tutaj ` po nazwie tabeli (order). Może to jest problemem, że nazwałeś tabelę nazwą zarezerwowaną (ORDER BY)? W podawanych przez Ciebie poleceniach SQL order znajduje się pomiędzy `, a w przytoczonym komunikacie błędu już nie.
Michał Gozdera

Michał Gozdera Development Team
Manager, PayU S.A. /
IT Toruń

Temat: Problem z insertem

Michał Płonka:
Przemysław Szczerbicki:Syntax error or access violation: 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 'order(`ID`,`USER_ID`,`COMPANY_ID`) VALUES (NULL,1,2)' at line 1
Hmmm, nie widzę tutaj ` po nazwie tabeli (order). Może to jest problemem, że nazwałeś tabelę nazwą zarezerwowaną (ORDER BY)? W podawanych przez Ciebie poleceniach SQL order znajduje się pomiędzy `, a w przytoczonym komunikacie błędu już nie.

W projekcie z doctrine zetknąłem się z podobnym problemem i chyba kolega wyżej utrafił w sedno. Nazwy tabel nie mogą być jednocześnie słowami kluczowymi mysql, w przeciwnym przypadku przy wykonaniu mysql traktuje je właśnie jako słowa kluczowe i sypie błędy. Możesz to obejść w schemie podając nazwę inną nazwę tabeli dla danego elementu modelu albo po psoru zmienić nazwę tabeli.
Przemysław Szczerbicki

Przemysław Szczerbicki Programista,
freelancer

Temat: Problem z insertem

Trochę to głupie, bo muszę tworzyć jakąś sztuczną nazwę dla tabeli. No trudno, w każdym razie pomogliście mi i dzięki wielkie za to :)

pzdr.
Michał Płonka

Michał Płonka Programista PHP

Temat: Problem z insertem

Możesz po prostu nadawać jakiś prefix tabelom i problemu nie będzie. Nie wiem jak w obecnych ale we wcześniejszych wersjach Symfony/Propel był problem również z kolumnami (pluło się np. przy kolumnie o nazwie password).
Roman Piekarski

Roman Piekarski Programista do
wynajęcia

Temat: Problem z insertem

Michał Płonka:
Możesz po prostu nadawać jakiś prefix tabelom i problemu nie będzie. Nie wiem jak w obecnych ale we wcześniejszych wersjach Symfony/Propel był problem również z kolumnami (pluło się np. przy kolumnie o nazwie password).

Hmm. Nie pomyslalem o tej mozliwosci slowa kluczowego. Trafiles w sedno sprawy. 1:0 dla ciebie;)
Michał Płonka

Michał Płonka Programista PHP

Temat: Problem z insertem

Hehe, rozliczymy się euro gąbkami na NK ;) Ale na poważnie: szczerze mówiąc dziwię się, że nazwy tabel nie są escapowane. Nazwy kolumn tak, więc dlaczego nie nazwy tabel? W sumie pewnie wystarczyłoby nadpisać nazwę tabeli w modelu dodając jawnie `.

Następna dyskusja:

problem z XSLT




Wyślij zaproszenie do