mysqli:prepare oder mysqli:query?

VanHellsehn

Erfahrenes Mitglied
Hi,
Ich hab mal ne frage und zwar kenne ich beiden FUnktionen und weiß wie man sie nutzt.
Doch was habe ich von mysqli::prepare wenn ich bei meiner mysqli::query alle Daten via real_escape_string escaped habe und diese in einem Sqlstring in einer Variable gespeichert habe? Meiner Meinung nach ist diese Möglichkeit schon sicher oder?
Was hat mysqli::prepare den für einen super Vorteil das ich mir die ganze Schreibarbeit antue?
 
Zuletzt bearbeitet:
Wohl den, dass du nur einmal eine SQL-Abfrage schreibst und danach beliebig oft Variablen einbinden kannst. Außerdem ist es recht praktisch, dass du auch das Ergebnis direkt in Variablen speichern kannst und somit nicht erst die Daten in einer WHILE-Schleife in ein Array speichern musst.
 
Also keinen großen Vorteil außer das man es in dummen Variablen hat?
Ich finde Array ziemlich gut geeignet zum weiterverarbeiten von MySql-Results.
 
Ersteres ist eher interessant. Mich würde es stören, wenn ich für jeden Datensatz mit dem gleichen Muster wieder mysql::query() aufrufen müsste. Letztendlich ist es aber eine Geschmackssache.
 
Hm.. danke für die schnelle Anwort wenn das alles ist denke ich bleibe ich bei meinem alten..
PHP:
$result = $db->query($sql);
while($array = $result->fetch_array(MYSQLI_NUM)){ ... }
 
Prepared Statements haben noch einen großen Vorteil: Der SQL-Query wird nur einmal an den Server gesendet. Das bedeutet Performance-Gewinn. Der Query muss auch nicht bei jedem execute() neu kompiliert werden. query() dagegen schon.

PS haben damit mehrere entscheidende Vorteile gegenüber query(). Umgekehrt seh ich keine, außer das es zunächst einfacher (wohl eher gewohnter) aussieht.

Mir (und meinem DBMS) gefällt es so besser [PSEUDOCODE]:

Code:
$stmt = $db->prepare("INSERT INTO my_special_data_table (some_data, and_another_data) VALUES (?, ?)");
while( $data = I_Have_Something_To_Save_In_DB() )
{
  $stmt->bind_value('i', $data->int_data);
  $stmt->bind_value('s', $data->string_data);
  $stmt->execute();
}
 
Also sollte ich besser IMMER auf prepare zurückgreifen?
Oder lohnt es nur wenn ich etwas in einer Schleife ausführe?
 
Zuletzt bearbeitet:
Ich setze es immer ein. Hat auch nen einfachen Grund: Es sieht einfach übersichtlicher aus als das:

Code:
$query = "INSERT INTO my_special_data_table (some_data, and_another_data) VALUES (" . mysql_real_escape_string($data->int_data) . " , '" . mysql_real_escape_string( $data->string_data ) . "')";

Das sieht einfach nur unübersichtlich aus. Ich muss bei jedem Feld überlegen, muss ich jetzt Quotes setzen oder nicht... Habe ich auch wirklich alle Quotes gesetzt?
 
Noch eine frage habe ich..
Und zwar wenn ich Daten aus einem Formular übernehme via POST oder GET, muss ich die Daten dann noch Escapen?
 
Zurück