Antwort an „Yadgar“ verfassen

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;
    );
}

Verstehe ich nicht, bin ich zu dumm für!

Edit Rolf B: Zitierten Tippfehler korrigiert

freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen