Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Fehlerhafte Abfrage (https://www.delphipraxis.net/161510-fehlerhafte-abfrage.html)

mkinzler 6. Jul 2011 20:03

AW: Fehlerhafte Abfrage
 
Dann musst du die mysqli-Funktionen nutzen:

PHP-Quellcode:
<?php
$mysqli = new mysqli("server", "username", "password", "database_name");

// TODO - Check that connection was successful.

$unsafe_variable = $_POST["user-input"];

$stmt = $mysqli->prepare("INSERT INTO table (column) VALUES (?)");

// TODO check that $stmt creation succeeded

// s means the database expects a string
$stmt->bind_param("s", $unsafe_variable);

$stmt->execute();

$stmt->close();

$mysqli->close();
?>
Btw. Auch als Purist solltest du mal einen Blick auf MDB2 oder PDO werfen.

Stevie 6. Jul 2011 20:05

AW: Fehlerhafte Abfrage
 
SQL Injection ist halt was tolles :twisted:

Luckie 6. Jul 2011 20:08

AW: Fehlerhafte Abfrage
 
Na ja, wenn jemand soweit kommt, dass er so was machen könnte, habe ich ganz andere Probleme. ;)

Das (?) wird dann durch den zweiten Parameter von bind_param ersetzt?

mkinzler 6. Jul 2011 20:11

AW: Fehlerhafte Abfrage
 
Zitat:

Na ja, wenn jemand soweit kommt, dass er so was machen könnte, habe ich ganz andere Probleme.
Passiert schnell, wenn man hier GET oder POST-Werte einsetzt.

Zitat:

Das (?) wird dann durch den zweiten Parameter von bind_param ersetzt?
Dem Parameter wird der Wert zugewiesen. (In diesem Fall hat dieser keinen Namen)

Luckie 6. Jul 2011 20:14

AW: Fehlerhafte Abfrage
 
Zitat:

Zitat von mkinzler (Beitrag 1110410)
Zitat:

Das (?) wird dann durch den zweiten Parameter von bind_param ersetzt?
Dem Parameter wird der Wert zugewiesen. (In diesem Fall hat dieser keinen Namen)

Das verstehe ich jetzt nicht.

mkinzler 6. Jul 2011 20:22

AW: Fehlerhafte Abfrage
 
Die Parameter sind eine Features des DBMS.

Beispiel Insert von mehreren Datensätzen

1. ohne Parameter:

SQL-Code:
insert into person ( name, vorname) values ( 'Puff', 'Michael');
insert into person ( name, vorname) Values ( 'Kinzler', 'Markus');
Es wird zuerst die 1. Abfrage an das DBMS gesendet, diese wird geparst und eine Abfargeplan gebildet.
Entsprechend für jeden weiteren Insert.

2. mit Parameter:

SQL-Code:
insert into person ( name, vorname) values ( :name, :vorname);
Es wird die Abfrage mit Platzhalter und nicht mit konkreten Werten an das DBMS gesendet. Dieses parst sie, bildet einen Plan und erzeugt die Parameter.

Beim eigentlichen Insert werden dann nur die Werte für die Parameter an das DBMS gesendet und die Abfrage mit diesen werten ausgeführt.
Das ist deutlich schneller, da die Abfrage nur einmal geparst und der Plan nur einmal ermittlet werden muss.

Ausserdem wird so wie erwähnt das Risiko von sql injection verringert.

Luckie 6. Jul 2011 20:28

AW: Fehlerhafte Abfrage
 
Code:
<?php
$mysqli = new mysqli("server", "username", "password", "database_name");

// TODO - Check that connection was successful.

$stmt = $mysqli->prepare("insert into person ( name, vorname) values ( :name, :vorname);");

// TODO check that $stmt creation succeeded

// s means the database expects a string
$stmt->bind_param("s", ???);

$stmt->execute();

$stmt->close();

$mysqli->close();
?>
Was müsste jetzt bei den Fragezeichen stehen?

fkerber 6. Jul 2011 20:31

AW: Fehlerhafte Abfrage
 
Hi,

deine konkreten Werte - also sowas wie $_GET['vorname'].


LG, Frederic

mkinzler 6. Jul 2011 20:34

AW: Fehlerhafte Abfrage
 
PHP-Quellcode:
$stmt = $mysqli->prepare("insert into person ( name, vorname) values ( ?, ?);");

PHP-Quellcode:
$stmt->bind_param("ss", 'Puff', 'Michael');

http://php.net/manual/de/mysqli-stmt.bind-param.php

Luckie 6. Jul 2011 20:38

AW: Fehlerhafte Abfrage
 
Ah, OK. Jetzt habe ich es verstanden. Das würde aber einen ziemlichen Refactoring Aufwand bedeuten. Ich glaube nicht, dass ich das in naher Zukunft machen werden. Höchstens wenn es mich packt, dann gibt es aber einen kompletten Rewrite. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz