Bankverbindung aus der Mysql auslesen

Hallo Liebe Community,

habe nun das Problem, das ich einen Cronjob erstellen möchte welcher mir alle Bestellungen in eine MSSQL DB exportiert.

Das sollte soweit nicht das Problem sein, jedoch finde ich keine möglichkeit die bankdaten aus der Tabelle oxuserpayments im feld “oxvalues” auslesen zu lassen. Ist ja bekanntlich ein Blob nur wie komme ich hier an den Text ran?

bitte um schnelle hilfe.

liebe grüße

oxid macht das irgendwie mit “DECODE”, wenns reines sql sein soll.

ich würde dir aber nahelegen dir ein kleines script zu schreiben welches richtig die objekte von OXID bildet und das kannst du dann wie gewohnt auslesen.

[QUOTE=-eZe-;12268]Hallo Liebe Community,

habe nun das Problem, das ich einen Cronjob erstellen möchte welcher mir alle Bestellungen in eine MSSQL DB exportiert.

Das sollte soweit nicht das Problem sein, jedoch finde ich keine möglichkeit die bankdaten aus der Tabelle oxuserpayments im feld “oxvalues” auslesen zu lassen. Ist ja bekanntlich ein Blob nur wie komme ich hier an den Text ran?

bitte um schnelle hilfe.

liebe grüße[/QUOTE]
Versuche es mal damit:

SELECT CONVERT( deinBlobfeld USING latin1 )  AS Feld FROM deineTabelle

Wobei statt “latin1” u.U. ein anderer Zeichensatzwert verwendet werden muss, wenn die Umlaute nicht stimmen…

[QUOTE=avenger;12290]Versuche es mal damit:

SELECT CONVERT( deinBlobfeld USING latin1 )  AS Feld FROM deineTabelle

Wobei statt “latin1” u.U. ein anderer Zeichensatzwert verwendet werden muss, wenn die Umlaute nicht stimmen…[/QUOTE]

hmm leider hat das ganze nicht funktioniert, bin aber in der zwischen zeit schon drauf gekommen das das ganze base64 verschlüsselt wurde (bin mir da aber noch nicht 100%ig sicher), dennoch habe ich leider keine verwertbaren daten rausbekommen.

oxid macht das irgendwie mit “DECODE”, wenns reines sql sein soll.

ich würde dir aber nahelegen dir ein kleines script zu schreiben welches richtig die objekte von OXID bildet und das kannst du dann wie gewohnt auslesen.

naja will bzw kann aus mehreren gründen eig nicht zusätzlich oxid objekte in den cronjob einpacken. deswegen würde ich mir, soweit benötigt, die funktionen rauskopieren.

So habs nach langem doch gefunden hier die Lösung für die die es Interessiert und irgendwann mal das selbe problem haben :slight_smile:


// Funktion aus dem Shopsystem
function strRot13( $sStr )
{
	$sFrom = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
	$sTo   = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM';

	return strtr( $sStr, $sFrom, $sTo );
}

//Eigene Funktion:
function makeBankArray( $sIn)
{
	$bankdata = array();
	$returnData = array();
	
	$bankdata = explode("@@",$sIn);
	unset($bankdata[4]);

	foreach($bankdata as $key => $val)
	{
		$tmpData = explode("__", $val);
		if(!empty($tmpData))
		{
			$returnData[$tmpData[0]] = $tmpData[1];
		}
	}
	
	return $returnData;
}

$paymentKey = 'fq45QS09_fqyx09239QQ';
$paymentKey = strRot13($paymentKey);


// SELECT befehl mit eigener db Klasse
$sql = "SELECT DECODE(OXVALUE, '".$paymentKey."') AS OXVALUE FROM oxuserpayments WHERE OXUSERID = '".$userData['paymentid']."' LIMIT 1";
$paymentData = single($db['SHOP']->query($sql));

//bankverbindung ist ein Array mit allen Daten
$bankverbindung = makeBankArray($paymentData['OXVALUE']);


Hallo,

nicht base64 sondern ROT verschlüsselt :slight_smile:

Danke für Deine Vorarbeit!

Hier für diejenigen, die die Daten mal kurz in phpmyadmin auslesen wollen, die entsprechende Query:

SELECT DECODE(OXVALUE, ‘sd45DF09_sdlk09239DD’) AS OXVALUEDECODED
FROM oxuserpayments
WHERE OXUSERID = ‘hier_eine_oxuserid_eintragen’

Der zum Decoden notwendige Schlüssel sd45DF09… ergibt sich aus den oben bereits genannten Stringoperationen (s. /core/oxuserpayment.php). Den Schlüssel für den Nutzer entsprechend ändern.

Da die Entschlüsselung der Zahlungsartdaten somit sehr leicht möglich ist, könnte man auf sie auch verzichten. Ist offenbar eine Altlast aus OXID1-3-Tagen.

@Thorsten Albrecht: Vielen Vielen Dank, das hat mir einige Zeit an eigenversuchen und Suche gespart.

Analog zu den hiesigen Beispielen, sollte das ja auch in PhpMyAdmin für die Tabelle OXCONFIG klappen

SELECT DECODE(OXVARVALUE, ‘<sConfigKey aus Datei core/oxconfk.php>’) AS OXVARVALUEDECODED
FROM oxconfig
WHERE OXVARNAME LIKE ‘whatever%’

Für Bspw. oxvarname = ‘blAllowNegativeStock’
erhalte ich den Wert
OXVARVALUEDECODED –> 31

da OXVARTYPE, bool ist, erwarte ich eigentlich sowas wie 0/1 oder false/true.

Auch bei oxvarname = ‘sDefaultImageQuality’, erwarte ich den Wert 90
ich erhalte aber den Wert: 313030

Was muss ich denn noch zusätzlich angeben?

Wär super, wenn jemand eine Idee hätte
Viele Grüße

Bei mir geht es z.B. so in Oxid 474:

SELECT DECODE([B]OXVALUE[/B], ‘[I]sd…DD[/I]’) AS OXVALUEDECODED
FROM oxuserpayments
WHERE OXUSERID = ‘oxdefaultadmin’

@Vladimir,

kopiere mal folgendes und setzte den key ein:

select oxvarname, oxvartype, DECODE( oxvarvalue, ‘[key]’) as oxvarvalue from oxconfig

@Earlybird, vielen Dank für deine Antwort.

Aber genau das mach ich ja :frowning:

Hmmm, kann es was mit der Zeichenkodierung (utf8/latin1) zu tun haben? Aber wie könnte man das prüfen …

Vielleicht noch einen Tipp?

@Vladimir,

nur zur Info: Die boolschen Werte werden korrekt mit 1 oder als leeres Feld ausgegeben. Unter latin1 ist das Ergebnis genau so wie unter utf8.

Mit welcher OXID, PHP, MySQL, phpMyAdmin Version hast Du das falsche Ergebnis?
Funktioniert sonst alles im Shop einwandfrei und keine Fehlerhinweise in den log files?