Error im mysql_fetch_int
- Cheevy.Shakur
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Das geht so nicht. Wenn du das nach diesem Prinzip machen willst, dann nutze die Cache Funktionen:
http://wiki.sa-mp.com/wiki/MyS…che_get_field_content_int(Beispiel ist dabei.)
http://wiki.sa-mp.com/wiki/MySQL#mysql_fetch_int
Gibt dir nur den Wert des ganzen Results als Integer aus, das macht für dich hier wenig Sinn. Arbeite mit den Cache Funktionen, dann bist du auf der besseren Seite. -
Ich benutze aber nicht MySQL Version R33.
-
Dann hast du zwei Möglichkeiten.
Möglichkeit 1: Du upgradest dein Plugin.Möglichkeit 2: Du nutzt
http://wiki.sa-mp.com/wiki/MySQL#mysql_fetch_row_format
Oder
http://wiki.sa-mp.com/wiki/MySQL#mysql_fetch_field_rowBeispiele sind jeweils dabei.
-
Kannst du mir kurz erklären wie es geht, mit eine Teil meines Cods?
Damit ich ein wenig Hilfestellung habe, die Tutorials im Wiki helfen mir nicht wirklich..Hab das jetzt so..
forward LoadPlayerVehicles(playerid,slot);
public LoadPlayerVehicles(playerid, slot)
{
mysql_query("SELECT * FROM script_vehicles WHERE Name='%s'",SpielerInfo[playerid][pName]);
mysql_store_result(); new resultline[200];
if(mysql_fetch_row_format(resultline))
{
sscanf(resultline,"p<|>s[25]diiiiiddddddddddddddddddds[32]iidd",
PrivateVehicle[playerid][slot][vehBesitzer],PrivateVehicle[playerid][slot][modelid],PrivateVehicle[playerid][slot][vehPosX],PrivateVehicle[playerid][slot][vehPosY],PrivateVehicle[playerid][slot][vehPosZ],PrivateVehicle[playerid][slot][vehPosA],PrivateVehicle[playerid][slot][vehHealth],
PrivateVehicle[playerid][slot][vehColor1],PrivateVehicle[playerid][slot][vehColor2],PrivateVehicle[playerid][slot][vehPaintjob],PrivateVehicle[playerid][slot][vehSpoiler],PrivateVehicle[playerid][slot][vehHood],PrivateVehicle[playerid][slot][vehRoof],PrivateVehicle[playerid][slot][vehSideskirt],
PrivateVehicle[playerid][slot][vehLamps],PrivateVehicle[playerid][slot][vehNitro],PrivateVehicle[playerid][slot][vehExhaust],PrivateVehicle[playerid][slot][vehWheels],PrivateVehicle[playerid][slot][vehStereo],PrivateVehicle[playerid][slot][vehHydraulics],PrivateVehicle[playerid][slot][vehFrontBumper],
PrivateVehicle[playerid][slot][vehRearBumper],PrivateVehicle[playerid][slot][vehVentRight],PrivateVehicle[playerid][slot][vehVentLeft],PrivateVehicle[playerid][slot][vehPreis],PrivateVehicle[playerid][slot][vehNeonID],PrivateVehicle[playerid][slot][vehNumberPlate],
Vehicle[PrivateVehicle[playerid][slot][vehID]][vehFuel],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehKMStand],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehInterior],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehWorld]);PrivateVehicle[playerid][slot][vehID] = CreateVehicle(PrivateVehicle[playerid][slot][modelid], PrivateVehicle[playerid][slot][vehPosX], PrivateVehicle[playerid][slot][vehPosY], PrivateVehicle[playerid][slot][vehPosZ], PrivateVehicle[playerid][slot][vehPosA], PrivateVehicle[playerid][slot][vehColor1], PrivateVehicle[playerid][slot][vehColor2], false);
VehicleTuning(playerid, slot);
}
mysql_free_result();
return 1;
}Code
Alles anzeigen[03:09:37] >> mysql_query_callback( Connection handle: 1 ) [03:09:37] CMySQLHandler::Query("LoadPlayerVehicles") - Custom callback query with index 0 started (ExtraID: -1) [03:09:37] >> mysql_query_callback( Connection handle: 1 ) [03:09:37] CMySQLHandler::Query("LoadPlayerVehicles") - Custom callback query with index 0 started (ExtraID: -1) [03:09:37] >> mysql_query_callback( Connection handle: 1 ) [03:09:37] CMySQLHandler::Query("LoadPlayerVehicles") - Custom callback query with index 0 started (ExtraID: -1) [03:09:37] >> mysql_query_callback( Connection handle: 1 ) [03:09:37] CMySQLHandler::Query("LoadPlayerVehicles") - Custom callback query with index 0 started (ExtraID: -1) [03:09:37] CMySQLHandler::ProcessQueryThread(SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d') - Data is getting passed to LoadPlayerVehicles() - (Threadsafe: No) [03:09:37] LoadPlayerVehicles(0,"SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d'") - Called. [03:09:37] CMySQLHandler::ProcessQueryThread() - Reconnection attempt in background thread. [03:09:37] CMySQLHandler::Connect() - Connection was successful. [03:09:37] CMySQLHandler::Connect() - Auto-Reconnect has been enabled. [03:09:37] CMySQLHandler::ProcessQueryThread(SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d') - Data is getting passed to LoadPlayerVehicles() - (Threadsafe: No) [03:09:37] LoadPlayerVehicles(0,"SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d'") - Called. [03:09:37] CMySQLHandler::ProcessQueryThread() - Reconnection attempt in background thread. [03:09:37] CMySQLHandler::Connect() - Connection was successful. [03:09:37] CMySQLHandler::Connect() - Auto-Reconnect has been enabled. [03:09:37] CMySQLHandler::ProcessQueryThread(SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d') - Data is getting passed to LoadPlayerVehicles() - (Threadsafe: No) [03:09:37] LoadPlayerVehicles(0,"SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d'") - Called. [03:09:37] CMySQLHandler::ProcessQueryThread() - Reconnection attempt in background thread. [03:09:37] CMySQLHandler::Connect() - Connection was successful. [03:09:37] CMySQLHandler::Connect() - Auto-Reconnect has been enabled. [03:09:37] CMySQLHandler::ProcessQueryThread(SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d') - Data is getting passed to LoadPlayerVehicles() - (Threadsafe: No) [03:09:37] LoadPlayerVehicles(0,"SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d'") - Called.
//edit: PWN hinzugefügt
//edit: PWN bearbeitet
//edit: MySQL Log hinzugefügt und Jeffy angesprochen -
Der Log passt nicht zu dem Code den du da gepostet hast.
Poste mal den Code, der dieses Query beinhaltet:Damit rufst du nämlich das public LoadPlayerVehicles auf, also so wie das aussieht, nutzt du möglicherweise doch ein Plugin mit Cache Funktionen.
Welches Plugin verwendest du denn eigentlich?
-
Hiermit lade ich den Plugin LoadPlayerVehicles.
for(new vehSlot=0;vehSlot<MAX_PLAYER_VEHICLES;vehSlot++)
{
mysql_query_callback(playerid,"SELECT * FROM `script_vehicles` WHERE `vehBesitzer`='%s' AND `Slot` = '%d'","LoadPlayerVehicles");
}Verwende die R5 Version von G-sTyLeZzZ.
-
Ändere das mal zu:
for(new vehSlot=0;vehSlot<MAX_PLAYER_VEHICLES;vehSlot++)
{
LoadPlayerVehicles(playerid, vehSlot);
}Und :
mysql_query("SELECT * FROM script_vehicles WHERE Name='%s'",SpielerInfo[playerid][pName]);
zu:
mysql_query("SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'",SpielerInfo[playerid][pName], slot); -
Hab das ganze mal geprintet, die Konsole spuckt nichts aus.
Diesbezüglich wird also kein Fahrzeug erstellt..Hier mal die MySQL Log
Code
Alles anzeigen[13:50:30] CMySQLHandler::ProcessQueryThread(SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d') - Data is getting passed to OnQueryFinish() - (Threadsafe: No) [13:50:30] OnQueryFinish(83,"SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'") - Called. [13:50:30] CMySQLHandler::ProcessQueryThread() - Reconnection attempt in background thread. [13:50:30] CMySQLHandler::Connect() - Connection was successful. [13:50:30] CMySQLHandler::Connect() - Auto-Reconnect has been enabled. [13:50:30] CMySQLHandler::ProcessQueryThread(SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d') - Data is getting passed to OnQueryFinish() - (Threadsafe: No) [13:50:30] OnQueryFinish(83,"SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'") - Called. [13:50:30] CMySQLHandler::ProcessQueryThread() - Reconnection attempt in background thread. [13:50:30] CMySQLHandler::Connect() - Connection was successful. [13:50:30] CMySQLHandler::Connect() - Auto-Reconnect has been enabled. [13:50:30] CMySQLHandler::ProcessQueryThread(SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d') - Data is getting passed to OnQueryFinish() - (Threadsafe: No) [13:50:30] OnQueryFinish(83,"SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'") - Called. [13:50:30] CMySQLHandler::ProcessQueryThread() - Reconnection attempt in background thread. [13:50:30] CMySQLHandler::Connect() - Connection was successful. [13:50:30] CMySQLHandler::Connect() - Auto-Reconnect has been enabled. [13:50:30] CMySQLHandler::ProcessQueryThread(SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d') - Data is getting passed to OnQueryFinish() - (Threadsafe: No) [13:50:30] OnQueryFinish(83,"SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'") - Called.
//edit: Push nach über 48 Stunden
//edit: Beitrag als neu markieren gewählt -
Sorry für die späte Antwort und Danke für den Push. Ich habe deine Antwort völlig übersehen.
Ich sehe grade das Problem im Log. Du hast mysql_query gar nicht umdefiniert, sodass man darin Parameter verwenden kann.
mysql_query("SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'",SpielerInfo[playerid][pName], slot);zu:
new query[256];
format(query, sizeof(query), "SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'", SpielerInfo[playerid][pName], slot);
mysql_query(query);Wie sieht es dann aus?
-
Der print gibt den Code irgendwie falsch aus, Fahrzeug wird InGame auch nicht erstellt.
forward LoadPlayerVehicles(playerid,slot);
public LoadPlayerVehicles(playerid, slot)
{
new query[256],resultline[200];
format(query, sizeof(query), "SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'", SpielerInfo[playerid][pName], slot);
mysql_query(query);
mysql_store_result();
if(mysql_fetch_row_format(resultline))
{
sscanf(resultline,"p<|>s[25]diiiiiddddddddddddddddddds[32]iidd",
PrivateVehicle[playerid][slot][vehBesitzer],PrivateVehicle[playerid][slot][modelid],PrivateVehicle[playerid][slot][vehPosX],PrivateVehicle[playerid][slot][vehPosY],PrivateVehicle[playerid][slot][vehPosZ],PrivateVehicle[playerid][slot][vehPosA],PrivateVehicle[playerid][slot][vehHealth],
PrivateVehicle[playerid][slot][vehColor1],PrivateVehicle[playerid][slot][vehColor2],PrivateVehicle[playerid][slot][vehPaintjob],PrivateVehicle[playerid][slot][vehSpoiler],PrivateVehicle[playerid][slot][vehHood],PrivateVehicle[playerid][slot][vehRoof],PrivateVehicle[playerid][slot][vehSideskirt],
PrivateVehicle[playerid][slot][vehLamps],PrivateVehicle[playerid][slot][vehNitro],PrivateVehicle[playerid][slot][vehExhaust],PrivateVehicle[playerid][slot][vehWheels],PrivateVehicle[playerid][slot][vehStereo],PrivateVehicle[playerid][slot][vehHydraulics],PrivateVehicle[playerid][slot][vehFrontBumper],
PrivateVehicle[playerid][slot][vehRearBumper],PrivateVehicle[playerid][slot][vehVentRight],PrivateVehicle[playerid][slot][vehVentLeft],PrivateVehicle[playerid][slot][vehPreis],PrivateVehicle[playerid][slot][vehNeonID],PrivateVehicle[playerid][slot][vehNumberPlate],
Vehicle[PrivateVehicle[playerid][slot][vehID]][vehFuel],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehKMStand],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehInterior],Vehicle[PrivateVehicle[playerid][slot][vehID]][vehWorld]);PrivateVehicle[playerid][slot][vehID] = CreateVehicle(PrivateVehicle[playerid][slot][modelid], PrivateVehicle[playerid][slot][vehPosX], PrivateVehicle[playerid][slot][vehPosY], PrivateVehicle[playerid][slot][vehPosZ], PrivateVehicle[playerid][slot][vehPosA], PrivateVehicle[playerid][slot][vehColor1], PrivateVehicle[playerid][slot][vehColor2], false);
printf("Model ID: %d PosX: %d PosY: %d PosZ: %d PosA: %d Color1: %d Color2: %d",PrivateVehicle[playerid][slot][modelid], PrivateVehicle[playerid][slot][vehPosX], PrivateVehicle[playerid][slot][vehPosY], PrivateVehicle[playerid][slot][vehPosZ], PrivateVehicle[playerid][slot][vehPosA], PrivateVehicle[playerid][slot][vehColor1], PrivateVehicle[playerid][slot][vehColor2]);
VehicleTuning(playerid, slot);
}
mysql_free_result();
return 1;
} -
Ok, aber das sieht doch schon wesentlich besser aus.
Poste bitte mal dein enum, das zu PrivateVehicle gehört, sowie einen Screenshot von der Struktur der Tabelle "script_vehicles", damit wir sehen können, welche Spalte was ist (Float, Integer, String...). -
Hier mal das enum
enum e_VehicleData
{
vehID,
vehBesitzer[MAX_PLAYER_NAME+1],
modelid,
Float:vehPosX,
Float:vehPosY,
Float:vehPosZ,
Float:vehPosA,
Float:vehPosX2,
Float:vehPosY2,
Float:vehPosZ2,
Float:vehHealth,
vehColor1,
vehColor2,
vehPaintjob,
vehSpoiler,
vehHood,
vehRoof,
vehSideskirt,
vehLamps,
vehNitro,
vehExhaust,
vehWheels,
vehStereo,
vehHydraulics,
vehFrontBumper,
vehRearBumper,
vehVentRight,
vehVentLeft,
vehPreis,
vehNeon1,
vehNeon2,
vehNeonID,
vehNumberPlate[32],
Float:vehFuel,
Float:vehKMStand,
vehInterior,
vehWorld,
vehTankKM,
vehKMStandCount,
bool:vehMotor,
bool:vehLicht,
bool:vehHaube,
bool:vehKRaum,
VehicleTimer,
Text3D:vehText,
vehFraktion,
dbID,
};
new Vehicle[MAX_VEHICLES][e_VehicleData];
new PrivateVehicle[MAX_PLAYERS][MAX_PLAYER_VEHICLES][e_VehicleData];Hier mal die Tabelle, wie ich Sie erstelle.
Code
Alles anzeigenDROP TABLE IF EXISTS `script_vehicles`; CREATE TABLE `script_vehicles` ( `id` int(10) NOT NULL AUTO_INCREMENT, `vehBesitzer` varchar(25) NOT NULL, `Slot` int(3) NOT NULL, `modelid` int(4) NOT NULL, `vehPosX` float(10,4) NOT NULL, `vehPosY` float(10,4) NOT NULL, `vehPosZ` float(10,4) NOT NULL, `vehPosA` float(10,4) NOT NULL, `vehHealth` float(10,4) NOT NULL, `vehColor1` int(4) NOT NULL, `vehColor2` int(4) NOT NULL, `vehPaintjob` int(5) NOT NULL, `vehSpoiler` int(5) NOT NULL, `vehHood` int(5) NOT NULL, `vehRoof` int(5) NOT NULL, `vehSideskirt` int(5) NOT NULL, `vehLamps` int(5) NOT NULL, `vehNitro` int(5) NOT NULL, `vehExhaust` int(5) NOT NULL, `vehWheels` int(5) NOT NULL, `vehStereo` int(5) NOT NULL, `vehHydraulics` int(5) NOT NULL, `vehFrontBumper` int(5) NOT NULL, `vehRearBumper` int(5) NOT NULL, `vehVentRight` int(5) NOT NULL, `vehVentLeft` int(5) NOT NULL, `vehPreis` int(10) NOT NULL, `vehNeonID` int(5) NOT NULL, `vehNumberPlate` varchar(32) NOT NULL, `vehFuel` float(10,4) NOT NULL, `vehKMStand` float(10,4) NOT NULL, `vehInterior` int(10) NOT NULL, `vehWorld` int(10) NOT NULL, `vehLocked` int(2) NOT NULL, `vehSecondOwner` varchar(25) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
Deine Angaben passen nicht.
In sscanf, für ein int in der Datenbank ein "d" oder ein "i", float ein f, varchar ein s[länge].
Das {d} am Anfang heißt, dass die ID ignoriert wird, das {d} damit der Slot ignoriert wird.
sscanf(resultline,"p<|>{d}s[25]{d}dfffffd ...",
Ab dem ... bitte selber weitermachen.Besser wäre es natürlich, es direkt in das enum zu splitten, aber dazu müsste dein enum 1:1 wie die Datenbank aufgebaut sein, das ist es leider nicht.
-
-
Ich glaube, sscanf ist nicht wirklich was für dich hier.
Vielleicht ist das hier anschaulicher:
MYSQL Lädt falsche werteDer string entspricht dem, was du aus der Datenbank lädst, also das was bei dir geprintet wird (resultline).
case 1 wäre dann die ID
case 2 der Besitzer
case 3 der Slot
case 4 die Model ID
...Kommst du damit klar?
EDIT: Ich muss mich schon wieder entschuldigen, dass ich deine Antwort nicht gesehen habe...wobei der Thread war als gelesen markiert war. Komisch.
EDIT:
@Jean_Pacino: Angesprochen. -
breadfish.de
Hat das Thema geschlossen.