Skocz do zawartości
Nergosu

Update w mysql, error

Rekomendowane odpowiedzi

stock SavePlayerData(playerid)
{
        new query[512];
        mysql_format(mysql, query, sizeof(query), "UPDATE `gracze` SET `IP`='%s', `Admin`='%d', `VIP`='%d', `Pkt`='%d', `Kasa`='%d', 'Banned'='%d', 'IDDomu'=%d, 'IDSamochodu'='%d', 'Frakcja'='%d', 'Bank'='%d' WHERE `UID`='%d'",\
        IP[playerid], pData[playerid][Admin], pData[playerid][VIP], GetPlayerScore(playerid), GetPlayerMoney(playerid), pData[playerid][Banned], pData[playerid][IDd], pData[playerid][IDs], pData[playerid][Frakcja], pData[playerid][Bank], pData[playerid][UID]);
        mysql_tquery(mysql, query, "", "");
}
stock SaveCarData(playerid)
{
        new query1[512],query2[512],query3[512];
        mysql_format(mysql, query1, sizeof(query1), "UPDATE `samochody` SET `Nazwa`='%s', `Model`='%d', `Cena`='%d', `SPOILER`='%d', `HOOD`='%d', `ROOF`='%d', `SIDESKIRT`='%d', `LAMPS`='%d', `NITROE`='%d' WHERE `ID`='%d'",\
        sData[playerid][Nazwa],sData[playerid][Model],sData[playerid][Cena],sData[playerid][SPOILER],sData[playerid][HOOD],sData[playerid][ROOF],sData[playerid][SIDESKIRT],sData[playerid][LAMPS],sData[playerid][NITROE],pData[playerid][IDs]);
        mysql_tquery(mysql, query1, "", "");
        mysql_format(mysql, query2, sizeof(query2), "UPDATE 'samochody' SET 'FBUMPER'='%d', 'RBUMPER'='%d', 'EXHAUST'='%d', 'WHEELSS'='%d', 'STEREO'='%d', 'HYDRAULICS'='%d', 'VLEFT'='%d', 'VRIGHT'='%d' WHERE 'ID'='%d'",\
        sData[playerid][FBUMPER],sData[playerid][RBUMPER],sData[playerid][EXHAUST],sData[playerid][WHEELSS],sData[playerid][STEREO],sData[playerid][HYDRAULICS],sData[playerid][VLEFT],sData[playerid][VRIGHT],pData[playerid][IDs]);                                                         
        mysql_format(mysql, query3, sizeof(query3), "UPDATE 'samochody' SET `Color1`='%d', `Color2`='%d', `Pos_x`='%f', `Pos_y`='%f', `Pos_z`='%f', `Rot`='%f' WHERE `ID`='%d'",\
        sData[playerid][Color1],sData[playerid][Color2],sData[playerid][Pos_x],sData[playerid][Pos_y],sData[playerid][Pos_z],sData[playerid][Rot],pData[playerid][IDs]);
        mysql_tquery(mysql, query3, "", "");
}

Witam, męczę się z tym już dobre kilka godzin i nadal nie mogę znaleźć rozwiązania, gdy chcę zapisywać dane do tabel to niektóre kwerendy się wykonują, a niektóre nie...

Wklejam wam te kwerendy, co z nimi jest nie tak? Pierwsza query1 z SaveCar działa, reszta nie.

A tutaj jeszcze errory z logów:

[18:46:44] [DEBUG] mysql_format - connection: 1, len: 512, format: "UPDATE `gracze` SET `IP`='%s', `Admin`='%d', `VIP`='%d', `Pkt`='%d', `Kasa`='%d', 'IDDomu'=%d, 'IDSamochodu'='%d' WHERE `UID`='%..."
[18:46:44] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `gracze` SET `IP`='127.0.0.1', `Admin`='5', `VIP`='5', `P", callback: "(null)", format: "(null)"
[18:46:44] [DEBUG] mysql_format - connection: 1, len: 512, format: "UPDATE `samochody` SET `Nazwa`='%s', `Model`='%d', `Cena`='%d', `SPOILER`='%d', `HOOD`='%d', `ROOF`='%d', `SIDESKIRT`='%d', `LAM..."
[18:46:44] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[18:46:44] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `samochody` SET `Nazwa`='Elegy', `Model`='562', `Cena`='2", callback: "(null)", format: "(null)"
[18:46:44] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''IDDomu'=0, 'IDSamochodu'='1' WHERE `UID`='1'' at line 1
[18:46:44] [DEBUG] mysql_format - connection: 1, len: 512, format: "UPDATE 'samochody' SET 'FBUMPER'='%d', 'RBUMPER'='%d', 'EXHAUST'='%d', 'WHEELSS'='%d', 'STEREO'='%d', 'HYDRAULICS'='%d', 'VLEFT'..."
[18:46:44] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
[18:46:44] [DEBUG] mysql_format - connection: 1, len: 512, format: "UPDATE 'samochody' SET `Color1`='%d', `Color2`='%d', `Pos_x`='%f', `Pos_y`='%f', `Pos_z`='%f', `Rot`='%f' WHERE `ID`='%d'"
[18:46:44] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE 'samochody' SET `Color1`='0', `Color2`='0', `Pos_x`='0.0'", callback: "(null)", format: "(null)"
[18:46:44] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[18:46:44] [DEBUG] mysql_format - connection: 1, len: 100, format: "UPDATE `domy` SET `Nazwa`='%s', `Cena`=%d, `Koszt`=%d, WHERE `Nalezy`=%d"
[18:46:44] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `domy` SET `Nazwa`='', `Cena`=0, `Koszt`=0, WHERE `Nalezy", callback: "(null)", format: "(null)"
[18:46:44] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 53.507 milliseconds
[18:46:44] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
[18:46:44] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[18:46:45] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''samochody' SET `Color1`='0', `Color2`='0', `Pos_x`='0.0', `Pos_y`='0.0', `Pos_z' at line 1
[18:46:45] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
[18:46:45] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[18:46:45] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE `Nalezy`=0' at line 1
[18:46:45] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
[18:46:44] [DEBUG] mysql_format - connection: 1, len: 512, format: "UPDATE `gracze` SET `IP`='%s', `Admin`='%d', `VIP`='%d', `Pkt`='%d', `Kasa`='%d', 'IDDomu'=%d, 'IDSamochodu'='%d' WHERE `UID`='%..."

Od IDDomu masz złe cudzysłowy, zobacz na wcześniejsze pola jakie mają cudzysłowy.

[18:46:44] [DEBUG] mysql_format - connection: 1, len: 512, format: "UPDATE 'samochody' SET `Color1`='%d', `Color2`='%d', `Pos_x`='%f', `Pos_y`='%f', `Pos_z`='%f', `Rot`='%f' WHERE `ID`='%d'"

Znów zły cudzysłów, tym razem przy samochody.

[18:46:44] [DEBUG] mysql_format - connection: 1, len: 100, format: "UPDATE `domy` SET `Nazwa`='%s', `Cena`=%d, `Koszt`=%d, WHERE `Nalezy`=%d"

Tutaj brak cudzysłowu od Cena.

Powinieneś był napisać w tym dziale.

Edytowane przez PrzMas
zły dział

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To apostrofy, zmieniłem na jednakowe (ta druga opcja z klawiatury, nie wiem jak zrobić pierwszą :x

Co nie zmieniło nic, dalej jest tak samo, pierwsza w SaveCar się wykonuje, a reszta nie.

[19:19:21] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE 'gracze' SET 'IP'='127.0.0.1', 'Admin'='5', 'VIP'='5', 'P", callback: "(null)", format: "(null)"
[19:19:21] [DEBUG] mysql_format - connection: 1, len: 512, format: "UPDATE 'samochody' SET 'Nazwa'='%s', 'Model'='%d', 'Cena'='%d', 'SPOILER'='%d', 'HOOD'='%d', 'ROOF'='%d', 'SIDESKIRT'='%d', 'LAM..."
[19:19:21] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[19:19:21] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE 'samochody' SET 'Nazwa'='Elegy', 'Model'='562', 'Cena'='2", callback: "(null)", format: "(null)"
[19:19:21] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''gracze' SET 'IP'='127.0.0.1', 'Admin'='5', 'VIP'='5', 'Pkt'='123', 'Kasa'='1231' at line 1
[19:19:21] [DEBUG] mysql_format - connection: 1, len: 512, format: "UPDATE 'samochody' SET 'FBUMPER'='%d', 'RBUMPER'='%d', 'EXHAUST'='%d', 'WHEELSS'='%d', 'STEREO'='%d', 'HYDRAULICS'='%d', 'VLEFT'..."
[19:19:21] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
[19:19:21] [DEBUG] mysql_format - connection: 1, len: 512, format: "UPDATE 'samochody' SET `Color1`='%d', `Color2`='%d', `Pos_x`='%f', `Pos_y`='%f', `Pos_z`='%f', `Rot`='%f' WHERE `ID`='%d'"
[19:19:21] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[19:19:21] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE 'samochody' SET `Color1`='0', `Color2`='0', `Pos_x`='0.0'", callback: "(null)", format: "(null)"
or the right syntax to use near ''samochody' SET 'Nazwa'='Elegy', 'Model'='562', 'Cena'='250000', 'SPOILER'='1147' at line 1
[19:19:21] [DEBUG] mysql_format - connection: 1, len: 100, format: "UPDATE `domy` SET `Nazwa`='%s', `Cena`=%d, `Koszt`=%d, WHERE `Nalezy`=%d"
[19:19:21] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
[19:19:21] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `domy` SET `Nazwa`='', `Cena`=0, `Koszt`=0, WHERE `Nalezy", callback: "(null)", format: "(null)"
[19:19:21] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[19:19:21] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''samochody' SET `Color1`='0', `Color2`='0', `Pos_x`='0.0', `Pos_y`='0.0', `Pos_z' at line 1
[19:19:21] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
[19:19:21] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[19:19:21] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE `Nalezy`=0' at line 1
[19:19:21] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError

Jeszcze w 3 query poprawiłem i też nic, w domach też i nic.

stock SavePlayerData(playerid)
{
        new query[512];
        mysql_format(mysql, query, sizeof(query), "UPDATE 'gracze' SET 'IP'='%s', 'Admin'='%d', 'VIP'='%d', 'Pkt'='%d', 'Kasa'='%d', 'Banned'='%d', 'IDDomu'=%d, 'IDSamochodu'='%d', 'Frakcja'='%d', 'Bank'='%d' WHERE `UID`='%d'",\
        IP[playerid], pData[playerid][Admin], pData[playerid][VIP], GetPlayerScore(playerid), GetPlayerMoney(playerid), pData[playerid][Banned], pData[playerid][IDd], pData[playerid][IDs], pData[playerid][Frakcja], pData[playerid][Bank], pData[playerid][UID]);
        mysql_tquery(mysql, query, "", "");
}
stock SaveCarData(playerid)
{
		new query1[512],query2[512],query3[512];
		mysql_format(mysql, query1, sizeof(query1), "UPDATE 'samochody' SET 'Nazwa'='%s', 'Model'='%d', 'Cena'='%d', 'SPOILER'='%d', 'HOOD'='%d', 'ROOF'='%d', 'SIDESKIRT'='%d', 'LAMPS'='%d', 'NITROE'='%d' WHERE `ID`='%d'",\
		sData[playerid][Nazwa],sData[playerid][Model],sData[playerid][Cena],sData[playerid][SPOILER],sData[playerid][HOOD],sData[playerid][ROOF],sData[playerid][SIDESKIRT],sData[playerid][LAMPS],sData[playerid][NITROE],pData[playerid][IDs]);
		mysql_tquery(mysql, query1, "", "");
		mysql_format(mysql, query2, sizeof(query2), "UPDATE 'samochody' SET 'FBUMPER'='%d', 'RBUMPER'='%d', 'EXHAUST'='%d', 'WHEELSS'='%d', 'STEREO'='%d', 'HYDRAULICS'='%d', 'VLEFT'='%d', 'VRIGHT'='%d' WHERE 'ID'='%d'",\
		sData[playerid][FBUMPER],sData[playerid][RBUMPER],sData[playerid][EXHAUST],sData[playerid][WHEELSS],sData[playerid][STEREO],sData[playerid][HYDRAULICS],sData[playerid][VLEFT],sData[playerid][VRIGHT],pData[playerid][IDs]);                                                         
		mysql_format(mysql, query3, sizeof(query3), "UPDATE 'samochody' SET 'Color1'='%d', 'Color2'='%d', 'Pos_x'='%f', 'Pos_y'='%f', 'Pos_z'='%f', 'Rot'='%f' WHERE 'ID'='%d'",\
		sData[playerid][Color1],sData[playerid][Color2],sData[playerid][Pos_x],sData[playerid][Pos_y],sData[playerid][Pos_z],sData[playerid][Rot],pData[playerid][IDs]);
		mysql_tquery(mysql, query3, "", "");
}
stock SaveHouseData(playerid)
{
		new query[100];
		mysql_format(mysql, query, sizeof(query), "UPDATE `domy` SET `Nazwa`='%s', `Cena`='%d', `Koszt`='%d', WHERE `Nalezy`='%d'",\
		dData[playerid][Nazwa],dData[playerid][Cena],dData[playerid][Koszt], dData[playerid][Nalezy]);
		mysql_tquery(mysql, query, "", "");	
}

 

Edytowane przez Nergosu
Dodanie kodu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zasada stosowania apostrofów i cudzysłowów w kwerendach jest taka:

`nazwa_tabeli`

oraz

`nazwa_pola`='wartość'

Nie można stosować ich wybiórczo, tzn jeśli w danej kwerendzie użyto apostrofów lub cudzysłowów choćby dla jednego pola to trzeba je zastosować do wszystkich pól, bo inaczej będzie to błąd składni. Można też nie stosować ich wcale, ale zawsze jednakowo dla wszystkich nazw i pól, nigdy wybiórczo.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No dobra, dodałem wszędzie, to może trochę głębiej.

new query1[512],query2[512],query3[512];
mysql_format(mysql, query1, sizeof(query1), "UPDATE 'samochody' SET 'Nazwa'='%s', 'Model'='%d', 'Cena'='%d', 'SPOILER'='%d', 'HOOD'='%d', 'ROOF'='%d', 'SIDESKIRT'='%d', 'LAMPS'='%d', 'NITROE'='%d' WHERE `ID`='%d'",\
		sData[playerid][Nazwa],sData[playerid][Model],sData[playerid][Cena],sData[playerid][SPOILER],sData[playerid][HOOD],sData[playerid][ROOF],sData[playerid][SIDESKIRT],sData[playerid][LAMPS],sData[playerid][NITROE],pData[playerid][IDs]);
		mysql_tquery(mysql, query1, "", "");



		mysql_format(mysql, query2, sizeof(query2), "UPDATE 'samochody' SET 'FBUMPER'='%d', 'RBUMPER'='%d', 'EXHAUST'='%d', 'WHEELSS'='%d', 'STEREO'='%d', 'HYDRAULICS'='%d', 'VLEFT'='%d', 'VRIGHT'='%d' WHERE 'ID'='%d'",\
		sData[playerid][FBUMPER],sData[playerid][RBUMPER],sData[playerid][EXHAUST],sData[playerid][WHEELSS],sData[playerid][STEREO],sData[playerid][HYDRAULICS],sData[playerid][VLEFT],sData[playerid][VRIGHT],pData[playerid][IDs]);
		mysql_tquery(mysql, query2, "", ""); 

Ta pierwsza wyżej wykonuje się normalnie, a ta poniżej już nie, dlaczego? Wszędzie są apostrofy.

 

 

 

 

O ile to możliwe to proszę o przeniesienie do działu Bazy danych.

Edytowane przez Nergosu
kod, prośba

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
UPDATE `samochody` SET `Nazwa`='%s', `Model`='%d', `Cena`='%d', `SPOILER`='%d', `HOOD`='%d', `ROOF`='%d', `SIDESKIRT`='%d', `LAMPS`='%d', `NITROE`='%d' WHERE `ID`='%d';

A teraz widzisz? Nazwy są w apostrofach (``) a wartości w pojedynczych cudzysłowach ('').

`nazwa`
'wartość'

Nazwa może być tabeli lub pola. Po UPDATE występuje nazwa tabeli, a po SET nazwy pól do nadpisania nowymi wartościami.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli ktoś potrzebuję rozwiązania, to sprawdzajcie kilka rzeczy:

1. Czy wasza zmienna string[] ma odpowiednią długość np. ma [100] a kwerenda ma 110 znaków, zawsze warto dać dłuższą, bo nie wiadomo, ale trzeba uważać, żeby też nie przesadzić.

2. Czy nazwy kolumn jak i wartości są w apostrofach '.

3. Czy w waszej bazie danych w kolumnach są ustawione wartości domyślne, jeśli nie to należy je ustawić nawet na 0.

 

Temat można zamknąć.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Godzinę temu, Nergosu napisał:

Jeśli ktoś potrzebuję rozwiązania, to sprawdzajcie kilka rzeczy:

(...)

3. Czy w waszej bazie danych w kolumnach są ustawione wartości domyślne, jeśli nie to należy je ustawić nawet na 0.

(...)

Wartość domyślna dla pola jest opcjonalna, a zatem niekonieczna.

Wartość domyślną pola ustawia się aby podczas wstawiania nowego rekordu do tabeli nie musieć określać wartości dla tegoż pola, ponieważ z góry wiadomo, że na czas wstawiania rekordu będzie ona zawsze taka sama. Takie rozwiązanie na pewno skraca długość kwerendy wstawiającej, która w przyszłości będzie wykonywana znacznie częściej niż kwerenda tworząca tabelę, w której określa się m. in. wartości domyślne pól.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×