Alles richtig +Beispiele
bearbeitet von Rolf B> 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:**
~~~PHP
$_GET['search'] = "Gene Roddenberry's Andromeda";
$mysqli = mysqli_connect( ... );
~~~
**Man will:**
~~~SQL
SELECT
title, isbn, author, price
FROM books
WHERE title SOUNDS LIKE 'Gene Roddenberry\'s Andromeda'
~~~
[**Man nehme also:**](https://www.php.net/manual/de/mysqli.real-escape-string.php)
~~~PHP
$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",
htmlspezialchars( $row['title'] ),
htmlspezialchars( $row['isbn'] ),
htmlspezialchars( $row['author'] ),
100 * $row['price'];
);
}
~~~
[**Oder**](https://www.php.net/manual/de/mysqli.prepare.php):
~~~PHP
$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",
htmlspezialchars( $title ),
htmlspezialchars( $isbn ),
htmlspezialchars( $author ),
100 * $price;
);
}