Vor SQL Injection schützen mit mysql_real_escape_string()

Ja, das ist die fehlende Verbindung.

Diese musst du dir jetzt über dein Singleton holen.


JEIN ...

Wenn man sich das Manual genau anschaut wird man feststellen das es eine "Object oriented style" und eine "Procedural style" gibt.

Da wird hier im "Object oriented style" sind wird es wohl wie auch im Manual beschrieben so gehen:

PHP:
$city = $mysqli->real_escape_string($city);

/* this query with escaped $city will work */
if ($mysqli->query("INSERT into myCity (Name) VALUES ('$city')")) {
    printf("%d Row inserted.\n", $mysqli->affected_rows);
}

zum Unterschied mal die prozedurale Variante
PHP:
$city = mysqli_real_escape_string($link, $city);
 
@ ne0hype
gelesen ja, verstanden nein.

@ Felix Jacobi
aber die Singleton steckt doch schon in $db woher soll ich sie denn noch holen. Und wohin?
 
Den Schnippsel habe ich übersehen.

PHP:
require_once("include/db_connect.inc.php");
$db = Singleton::holeVerbindung();
$db->select_db('DB0815');
$suchbegriff = $db->real_escape_string($_POST['suche']);
if($ergebnis = $db->query('SELECT * FROM liste WHERE suchbegriffe LIKE "%'.$suchbegriff.'%" ')){

Versuch es mal so.
 
@ Felix Jacobi
Ok so funktionierts ohne Fehlermeldung.
Aber ist nun $db->real_escape_string() das Gleiche wie
mysql_real_escape_string() ?
Und wenn ja warum?

(Ich hoffe ich strapaziere Deine Geduld nicht zu sehr)
 
Also, PHP hat damals einen nativen MySQL Treiber (bin mir gerade wegen der Begrifflichkeit nicht sicher) erstellt, das sind die mysql_* Funktionen.
Mit PH5 hielt auch MySQLi in den PHP Kern Einzug. Überarbeitet mit der Unterstützung von Sun ist er schneller (heißt ja auch improved) und bietet eine prozedurale (die mysqli_* Funktionen) und einen objektorientierten Ansatz (die Klasse MySQLi).

Wenn man PHP5 hat und sich keine Sorgen um Rückwärtskompatibilität machen muss, sollte man immer MySQLi verwenden.
Wenn man nicht gerade einen Datenbankwrapper verwendet, wie aus dem Zend Framework, PDO oder ähnliches.
 
Zurück