![]() |
AW: Fehlerhafte Abfrage
Dann musst du die mysqli-Funktionen nutzen:
PHP-Quellcode:
Btw. Auch als Purist solltest du mal einen Blick auf MDB2 oder PDO werfen.
<?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(); ?> |
AW: Fehlerhafte Abfrage
![]() |
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? |
AW: Fehlerhafte Abfrage
Zitat:
Zitat:
|
AW: Fehlerhafte Abfrage
Zitat:
|
AW: Fehlerhafte Abfrage
Die Parameter sind eine Features des DBMS.
Beispiel Insert von mehreren Datensätzen 1. ohne Parameter:
SQL-Code:
Es wird zuerst die 1. Abfrage an das DBMS gesendet, diese wird geparst und eine Abfargeplan gebildet.
insert into person ( name, vorname) values ( 'Puff', 'Michael');
insert into person ( name, vorname) Values ( 'Kinzler', 'Markus'); Entsprechend für jeden weiteren Insert. 2. mit Parameter:
SQL-Code:
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.
insert into person ( name, vorname) values ( :name, :vorname);
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. |
AW: Fehlerhafte Abfrage
Code:
Was müsste jetzt bei den Fragezeichen stehen?
<?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(); ?> |
AW: Fehlerhafte Abfrage
Hi,
deine konkreten Werte - also sowas wie $_GET['vorname']. LG, Frederic |
AW: Fehlerhafte Abfrage
PHP-Quellcode:
$stmt = $mysqli->prepare("insert into person ( name, vorname) values ( ?, ?);");
PHP-Quellcode:
$stmt->bind_param("ss", 'Puff', 'Michael');
![]() |
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. |
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