Daten in MySQL auf einem Internet-Server verwalten..

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

User avatar
wriedmann
Posts: 3759
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Daten in MySQL auf einem Internet-Server verwalten..

Post by wriedmann »

Hallo Meinhard,
wie geschrieben: mir persönlich ist es auch zu gefährlich, einen Datenbank-Port zum Internet zu öffnen....
Grade heute wieder einen entsprechenden Hinweis gesehen, in einem Artikel über massenweise und automatisierte Hacking-Angriffe, diesmal auf MS SQL Server.
Daher nutze ich lieber andere Methoden, wenn die DB schon im Internet zur Verfügung stehen muss.
Dann scheitern schon mal automatisierte Angriffe.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
g.bunzel@domonet.de
Posts: 97
Joined: Tue Mar 01, 2016 11:50 am
Location: Germany

Daten in MySQL auf einem Internet-Server verwalten..

Post by g.bunzel@domonet.de »

Hallo Zusammen,

...erst mal vielen Dank an alle Unterstützer.
Ich habe jetzt begonnen, das mit dem PHP-Interface zu testen - als Idee/Grundlage dient das Beispiel von Wolfgang.
Sieht so aus, als würde das recht gut und problemlos funktionieren.

@Wolfgang:
Die Objecte in der Hardcopy aus einem der ersten Antworten sind in dem Beispielcode leider nicht enthalten z.B.'CreateInsertStatement', 'oData' oder 'oRecord'.
Wäre es möglich da noch etwas Code zu bekommen?

Vielen Dank im Voraus
Gerhard
User avatar
wriedmann
Posts: 3759
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Daten in MySQL auf einem Internet-Server verwalten..

Post by wriedmann »

Hallo Gerhard,
das ist jede Menge Code.... und einiges davon würde ich heute anders und besser schreiben....
Hier nur mal beispielhaft das CreateInsertStatement:

Code: Select all

function CreateInsertStatement( cTable as string, aValues as array ) as string pascal  
	local cStatement			as string
	local nLen					as dword
	local nI					as dword
	local cField				as string
	local uValue				as usual
	local cValue				as string
	local cFields				as string
	local cValues				as string
	
    cStatement				:= "insert into " + cTable + " ( "
    cFields					:= ""
    cValues					:= ""
    nLen					:= ALen( aValues )
    for nI := 1 upto nLen 
    	cField					:= aValues[nI,1]
    	uValue					:= aValues[nI,2]
    	do case
    	case IsString( uValue )
    		cValue					:= "'" + FixSQL( uValue ) + "'"
    	case IsNumeric( uValue )
    		cValue					:= StrTran( AllTrim( Str( uValue, 18, -1 ) ), ",", "." )
    	case IsDate( uValue )
    		if uValue == null_date
	    		cValue					:= "null"
    		else
	    		cValue					:= "'" + StrZero( Year( uValue ), 4, 0 ) + "-" + StrZero( Month( uValue ), 2, 0 ) + "-" + StrZero( Day( uValue ), 2, 0 ) + "'"
    		endif
    	case IsLogic( uValue )
    		cValue					:= IIf( uValue, "1", "0" )
    	endcase
    	if nI < nLen
    		cFields						:= cFields + cField + ", "
    		cValues						:= cValues + cValue + ", "
    	else
    		cFields						:= cFields + cField
    		cValues						:= cValues + cValue
    	endif
    next
    cStatement				:= cStatement + cFields + " ) values ( " + cValues + ")"
    
    return cStatement
function FixSQL( cValue as string ) as string pascal

	if InStr( "'", cValue )
		cValue				:= StrTran( cValue, "'", "''" )
	endif
	
	return cValue
Für den anderen Code müsste ich das alles mal zusammenschreiben - da fehlt auch auf der PHP-Seite einiges, was ich heute definitiv anders und besser schreiben würde.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
g.bunzel@domonet.de
Posts: 97
Joined: Tue Mar 01, 2016 11:50 am
Location: Germany

Daten in MySQL auf einem Internet-Server verwalten..

Post by g.bunzel@domonet.de »

Hallo Wolfgang,

vielen Dank für die schnelle Antwort.
In der Hardcopy ist oInsert ein Objekt mit Methoden z.B. AddField() oder GetSQLString().
Grundsätzlich ist damit aber klar, wie das funktionieren soll. Ich werde mir dazu auch Objekte erstellen - das ist flexibler und der Code ist besser lesbar.
Vielen Dank für die Infos - werde das mal in dieser Richtung weiter testen.

Danke
Gerhard
User avatar
wriedmann
Posts: 3759
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Daten in MySQL auf einem Internet-Server verwalten..

Post by wriedmann »

Hallo Gerhard,
ok, die entsprechenden Klassen findest Du als PRG hier:
SQLUtility.zip
(2.32 KiB) Downloaded 66 times
Die Funktion war kürzer....
Die Klassen decken aber nicht nur MySQL ab, sondern auch PostgreSQL und MS SQL (Oracle verwende ich in diesem Projekt nicht).
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
g.bunzel@domonet.de
Posts: 97
Joined: Tue Mar 01, 2016 11:50 am
Location: Germany

Daten in MySQL auf einem Internet-Server verwalten..

Post by g.bunzel@domonet.de »

Hallo Wolfgang,

SUPER - Vielen Dank!!
Es fehlt nur die Funktion ParmSubst(..) für z.B.:
ParmSubst( "update %1 set ", cTableName ) + " "

Das wird wohl so etwas sein:
StrTran(cString, MC_STRING_MERGE_1, AsString(uPara1))
usw. für evtl. mehrere Parameter.

Nochmals VIELEN DANK!
Gerhard
User avatar
wriedmann
Posts: 3759
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Daten in MySQL auf einem Internet-Server verwalten..

Post by wriedmann »

Hallo Gerhard,
diese Funktion habe ich sehr viel in Verwendung.... daher habe ich nicht dran gedacht:

Code: Select all

function ParmSubst( cString )
//p Parameter (%1, %2, %3 usw.) in String ersetzen
//s
	local cResult		as string
	local nLen			as dword
	local nI			as dword
	local cValue		as string
	local uValue		as usual

	nLen			:= dword( PCount() )
	if nLen == 0			// keine Parameter
		return ""
	endif
	if nLen == 1
		return cString
	endif
	cResult			:= cString
//	for nI := 2 upto nLen
	for nI := nLen downto 2		// damit auch mehrstellige funktionieren
		uValue			:= _GetFParam( nI )
		do case
		case IsString( uValue )
			cValue			:= uValue
		case IsNumeric( uValue )
			cValue			:= AllTrim( BF( uValue ) )
		case IsLogic( uValue )
			cValue			:= IIf( uValue, ".t.", ".f." )
		otherwise
			cValue			:= AsString( uValue )
		endcase
		cResult			:= StrTran( cResult, "%" + NTrim( nI - 1 ), cValue )
	next

	return cResult
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
g.bunzel@domonet.de
Posts: 97
Joined: Tue Mar 01, 2016 11:50 am
Location: Germany

Daten in MySQL auf einem Internet-Server verwalten..

Post by g.bunzel@domonet.de »

Hallo Wolfgang,

VIELEN DANK!

...eine fehlt noch.... :-)….die Funktion BF( uValue ).

DANKE
Gerhard
User avatar
wriedmann
Posts: 3759
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Daten in MySQL auf einem Internet-Server verwalten..

Post by wriedmann »

Hallo Gerhard,

auch wieder etwas länger - hatte mich gar nicht erinnert, dass ich die da drin hatte.
Ein ToString() tut es auch.

Code: Select all

function BF( nNumber, nInt, nDec )
	local cRetValue		as string
	local cPicture		as string
	local nWNumber		as float
	local nWInt			as int
	local nWDec			as int
	local nCounter		as dword
	local nLen			as dword

	nWNumber		:= IIf( IsNumeric( nNumber ), nNumber, 0 )
	nWInt			:= IIf( IsNumeric( nInt ), nInt, -1 )
	nWDec			:= IIf( IsNumeric( nDec ), nDec, -1 )
	if nWDec == -1 .and. Frac( Abs( nNumber ) ) < 0.001
		nWDec			:= 0
	endif

	if nWDec == -1 .or. nWInt < 1           	// feststellen Dezimal-Stellen und/oder Vorkomma-Stellen
		cRetValue		:= wStr( nNumber, nWInt, nWDec )
		nCounter		:= At( Chr( SetDecimalSep() ), cRetValue )
		if nWDec == -1
			if nCounter == 0
				nWDec			:= 0
			else
				nWDec			:= Int( SLen( SubStr2( cRetValue, nCounter + 1 ) ) )
			endif
		endif
		if nWInt < 1
			if nCounter == 0
				nWInt		 	:= Int( SLen( cRetValue ) )
			else
				nWInt			:= Int( nCounter - 1 )
			endif
		endif
		cRetValue		:= ""
	endif
	nLen			:= dword( nWInt )

	// Picture zusammenstellen
	cPicture		:= ""
	nCounter		:= dword( nWInt % 3 )
	IF nCounter > 0
		cPicture		:= Replicate( "9", nCounter )
		nWInt		-= Int( nCounter )
		IF nWInt > 0
			cPicture		+= ","
		ENDIF
	ENDIF
	WHILE nWInt > 0
		cPicture		+= Replicate( "9", 3 )
		nWInt		-= 3
		IF nWInt > 0
			cPicture		+= ","
		ENDIF
	END
	IF nWDec > 0
		cPicture		+= "." + Replicate( "9", dword( nWDec ) )
	ENDIF

	cRetValue	:= AllTrim( Transform( nWNumber, cPicture ) )
	if SLen( cRetValue ) < nLen
		cRetValue		:= PadL( cRetValue, nLen )
	endif

	return cRetValue
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
g.bunzel@domonet.de
Posts: 97
Joined: Tue Mar 01, 2016 11:50 am
Location: Germany

Daten in MySQL auf einem Internet-Server verwalten..

Post by g.bunzel@domonet.de »

Hallo Wolfgang,

vielen Dank für die schnelle Unterstützung.
Da ist noch eine Funktion wStr( nNumber, nWInt, nWDec ) enthalten - ein normales Str(…) wird es da aber auch tun.
Gibt es bei der Übergabe per http eine maximale Länge für den String zur Verarbeitung mit PHP?

Nochmals vielen Dank!!
Gerhard
Post Reply