Register for your free account! | Forgot your password?

You last visited: Today at 21:41

  • Please register to post and access all features, it's quick, easy and FREE!

 

[PHP] SQL Klasse

Reply
 
Old   #1

 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,126
Received Thanks: 14,319
[PHP] SQL Klasse

Groß werde ich hier nichts schreiben, hier ist eine SQL Klasse, welche ich damals irgendwo aufgegriffen habe und ein klein wenig modifiziert habe so das diese nicht mehr Injectbar ist.

config.php
PHP Code:
<?php
define
"MSSQL_HOST""" );
define"MSSQL_USER""" );
define"MSSQL_PASS""" );
?>
class.mssql.php (MSSQL)
PHP Code:
 <?php
class MSSQL
{
public 
$query null;
public 
$fetch null;
protected 
$fetca;
protected 
$mfetc;

public function 
__construct ($fetch false$multi false)
{
$fetch $this->fetca true $this->fetca false;
$multi $this->mfetc true $this->mfetc false;
}

public function 
Escape($arg)
{
foreach (
$arg as $value)
is_numeric($value) ? $return[] = $value $return[] = "0x".bin2hex$value );
return 
$return;
}

public function 
Exec()
{
if( !
func_num_args() )
return 
false;

$arg func_get_args();

$query $arg[0];
unset(
$arg[0]);

if( 
count$arg ) )
$query vsprintf$query$this->Escape$arg ) );

mssql_connectMSSQL_HOSTMSSQL_USERMSSQL_PASS );
$this->query mssql_query($query);

if( 
$this->fetca )
{
if( 
$this->mfetc )
while( 
$fetch mssql_fetch_array$this->query ) )
$this->fetch[] = $fetch;
else
$this->fetch[] = mssql_fetch_array$this->query );
}

if( 
is_resource$this->query ) )
mssql_free_result$this->query );

mssql_close();
return 
true;
}

public function 
m_fetch()
{
$return null;
$i 0;
while( isset( 
$this->fetch[$i] ) )
{
$return[] = $this->fetch[$i];
$i++;
}
return 
$return;
}
}
?>
class.odbc.php (ODBC)
PHP Code:
 <?php
class MSSQL
{
public 
$query null;
public 
$fetch null;
protected 
$fetca;
protected 
$mfetc;

public function 
__construct ($fetch false$multi false)
{
$fetch $this->fetca true $this->fetca false;
$multi $this->mfetc true $this->mfetc false;
}

public function 
Escape($arg)
{
foreach (
$arg as $value)
is_numeric($value) ? $return[] = $value $return[] = "0x".bin2hex$value );
return 
$return;
}

public function 
Exec()
{
if( !
func_num_args() )
return 
false;

$arg func_get_args();

$query $arg[0];
unset(
$arg[0]);

if( 
count$arg ) )
$query vsprintf$query$this->Escape$arg ) );

$mssql odbc_connect('Driver={SQL Server};Server='.MSSQL_HOST.';'MSSQL_USERMSSQL_PASS);
$this->query odbc_exec$mssql$query );

if( 
$this->fetca )
{
if( 
$this->mfetc )
while( 
$fetch odbc_fetch_array$this->query ) )
$this->fetch[] = $fetch;
else
$this->fetch[] = odbc_fetch_array$this->query );
}

if( 
is_resource$this->query ) )
odbc_free_result$this->query );

odbc_close$mssql );
return 
true;
}

public function 
m_fetch()
{
$return null;
$i 0;
while( isset( 
$this->fetch[$i] ) )
{
$return[] = $this->fetch[$i];
$i++;
}
return 
$return;
}
}
?>
Anwendung
PHP Code:
// Update / Insert / Delete Commands
$SQL = new MSSQL();
$Query "USE [EXAMPLE_DBF] UPDATE [EXAMPLE_TBL] SET [EXAMPLE_COLUMN_1] = %s, [EXAMPLE_COLUMN_2] = %s";
$SQL->Exec$Query"example value 1""example value 2" );

// Get value
$SQL = new MSSQLtrue );
$Query "USE [EXAMPLE_DBF] SELECT * FROM [EXAMPLE_TBL] WHERE [EXAMPLE_COLUMN] = %s";
$result $SQL->Exec$Query"test" ) ? $SQL->fetch[0]["COLUMN"] : false;

// Get multiple values
$SQL = new MSSQLtruetrue );
$Query "USE [EXAMPLE_DBF] SELECT * FROM [EXAMPLE_TBL] WHERE [EXAMPLE_COLUMN] = %s";
$result $SQL->Exec$Query"test" ) ? $SQL->m_fetch() : false
Selbst wenn man einen INSERT Befehl so manipulieren würde, dass shutdown an den Server gesendet wird, würde dieser diesen nicht mehr als Befehl sondern als Zeichenkette interpritieren und somit wären Injections geblockt.

Und jeweils nur entweder die class.mssql.php oder class.odbc.php benutzen und nicht beides gemeinsam includen.

Moralaposteln die ankommen mit "Und was ist mit dem resourcen verbrauch" - ihr könnt mich mal Bedankt euch lieber das ihr hier euch die Injections rausnehme.



Sedrika is offline  
Thanks
3 Users
Old   #2
 
elite*gold: 80
Join Date: May 2013
Posts: 147
Received Thanks: 23
Thanks, it is very helpful


Supr3matt is offline  
Old   #3

 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,126
Received Thanks: 14,319
Is anyone using this class?
Sedrika is offline  
Old   #4
 
elite*gold: 0
Join Date: Oct 2012
Posts: 947
Received Thanks: 152
Its an nice class but i have my own class that doesnt relay on ODBC.

But its an good job. I wish i could see more of OOP.

I am currently working an an flyff website thats based on OOP.


raventh1984 is offline  
Old   #5

 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,126
Received Thanks: 14,319
There are both scripts. One for mssql connection and one for odbc.
Sedrika is offline  
Old   #6
 
elite*gold: 0
Join Date: Oct 2012
Posts: 947
Received Thanks: 152
o.O didnt say the first one.

haha ok

Here i am using this one. its MSSQL

PHP Code:
<?php
class MSSQL
{
    private 
$_link;

    public function 
connect($server=''$username=''$password=''$new_link=true)
    {
        
$this->_link mssql_connect($server$username$password$new_link);
    }
    
    public function 
Escape($string)
    {
        return 
str_replace("'""''"$string);
    }
    
     public function 
query($query) {
        return 
mssql_query($query$this->_link);  
    }
    
    public function 
fetchArray($result$array_type MYSQL_BOTH) {
        return 
mssql_fetch_array($result$array_type);  
    }
    
    public function 
fetchRow($result) {
        return 
mssql_fetch_row($result);  
    }
    
    public function 
fetchAssoc($result) {
        return 
mssql_fetch_assoc($result);
    }
    
    public function 
fetchObject($result) {
        return 
mssql_fetch_object($result);  
    }
    
    public function 
numRows($result) {
        return 
mssql_num_rows($result);
    }
    
    public function 
close() {
        return 
mssql_close($this->_link);
    }
}

//Example
//Select DB
$db->query('USE ACCOUNT_DBF');
//Getting data
$result $db->query('SELECT account,password FROM ACCOUNT_TBL WHERE account = "accountname"');
//Fetching the data
echo $db->fetchAssoc($result);

?>
raventh1984 is offline  
Old   #7

 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,126
Received Thanks: 14,319
Use at least my escape function it's way better then yours
Sedrika is offline  
Thanks
1 User
Old   #8
 
elite*gold: 0
Join Date: Dec 2012
Posts: 33
Received Thanks: 14
@raventh1984 that's a really poor class. Use at least prepared statements as in Sedrika script.
I've somewhere a SQL class I don't use since a long time ago, I will post if I find it.
DarkFlyffTeam is offline  
Old   #9
 
elite*gold: 0
Join Date: Oct 2012
Posts: 947
Received Thanks: 152
Thanks for the comment DarkFlyff
I will take an look into prepared statements.


raventh1984 is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
Biete Mathehilfe bis zur 10. Klasse Real/ 9.Klasse Haupt
Wenn ihr Probleme mit einer aufgabe habt, schickt mir eine PM. Kostet nur 1eGold. Vielleicht auch nichts :D Kommt ganz auf die aufgaben drauf an.
0 Replies - School & Education
Volkswechsel alte Klasse(Classic)->neue Klasse(Cata)
Hi, Ich würde meinen Untoten Magier gerne zu einem Goblin Magier verändern. Ich weis auch, dass Goblins Magier sein können aber ich finde keine...
13 Replies - WoW Ask the Experts
[C++]Funktion einer Klasse in einer anderen Funktion der Klasse verwenden, aber wie?
Mein Problem ist eigentlich recht simpel und die Lösung wahrscheinlich auch. Da ich bisher fast 0 mit Klassen am Hut hatte, wollte ich mich doch mit...
3 Replies - C/C++
Welche Klasse ist die Beste Klasse
Hallo ich habe heute mal angefangen Metin 2 angefangen und wollte fragen welche klasse ist die beste meine Vorstellung Menge Deff Wird Mich freuen...
6 Replies - Metin2 Main - Discussions / Questions



All times are GMT +2. The time now is 21:41.


Powered by vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2018 elitepvpers All Rights Reserved.