AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlerhafte Abfrage

Offene Frage von "Luckie"
Ein Thema von Luckie · begonnen am 6. Jul 2011 · letzter Beitrag vom 6. Jul 2011
Antwort Antwort
Seite 3 von 4     123 4      
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:03
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#22

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:05
SQL Injection ist halt was tolles
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#23

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:08
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:11
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)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#25

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:14
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:22
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:

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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#27

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:28
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#28

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:31
Hi,

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


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:34
$stmt = $mysqli->prepare("insert into person ( name, vorname) values ( ?, ?);");
$stmt->bind_param("ss", 'Puff', 'Michael');
http://php.net/manual/de/mysqli-stmt.bind-param.php
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#30

AW: Fehlerhafte Abfrage

  Alt 6. Jul 2011, 21:38
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz