Raketenbeispielgeber: Alles richtig +Beispiele

Beitrag lesen

Das ist aber wirklich nur eine diffuse Vermutung, denn bei richtiger Verwendung von mysqli_real_escape_string() sollte gerade so etwas, was du beschreibst, nicht passieren.

Ein Beispiel sagt mehr als tausend Worte: (Ich hoffe, ich hab nichts falsch gemacht...)

Man hat:

$_GET['search'] = "Gene Roddenberry's Andromeda";
$mysqli = mysqli_connect( ... );

Man will:

SELECT
   title, isbn, author, price
FROM books
WHERE title SOUNDS LIKE 'Gene Roddenberry\'s Andromeda'

Man nehme also:

$sql = sprintf(
    "SELECT 
        `title`,
        `isbn`,
        `author`,
        `price`
     FROM `books`
     WHERE `title` SOUNDS LIKE '%s'",
     $mysqli->real_escape_string( $_GET['search' )
);
$result = $mysqli->query( $sql );

$tdata = '';
while ( $row = $result->fetch_assoc() ) {
    $tdata .= sprintf (
       "\t<tr><td>%s</td><td>%s</td><td>%s<td></td>€ %01.2f<td></tr>\n",
       htmlspecialchars( $row['title'] ),
       htmlspecialchars( $row['isbn'] ),
       htmlspecialchars( $row['author'] ),
       100 * $row['price'];
    );    
}

Oder:

$stmt = $mysqli->prepare(
    "SELECT
        `title` 
        `isbn`,
        `author`,
        `price`
     FROM `books`
     WHERE `title` SOUNDS LIKE ?"
);
$stmt->bind_param( "s", $_GET['search'] );
$stmt->execute();
$stmt->bind_result( $title, $isbn, $author, $price );

$tdata = '';
while ( $stmt->fetch() ) {
    $tdata .= sprintf (
       "\t<tr><td>%s</td><td>%s</td><td>%s<td></td>€ %01.2f<td></tr>\n",
       htmlspecialchars( $title ),
       htmlspecialchars( $isbn ),
       htmlspecialchars( $author ),
       100 * $price;
    );
}

Edit Rolf B: htmlspecialchars, nicht htmlspezialchars