Ich übergebe Formularwerte in eine Datenbank mit PHP, aber ich bin ein Problem, wenn Benutzer Sonderzeichen wie ein Apostroph eingeben. Wenn beispielsweise jemand Bill's Pet Supply
in Organisation eingibt, wird ein SQL-Fehler angezeigt.Einfügen von Sonderzeichen in SQL-Datenbank aus Formular
Hier ist mein Code:
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(isset($_POST['submit'])) {
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$organization = $_POST['organization'];
$sql = $conn->prepare("INSERT INTO submissions VALUES (:firstname, :lastname, :email, :organization)");
$sql->bindValue(':firstname', $firstname);
$sql->bindValue(':lastname', $lastname);
$sql->bindValue(':email', $email);
$sql->bindValue(':organization', $organization);
$sql->execute();
}
$conn->close();
Wie kann ich diesen Code ändern, so dass Apostrophe und andere Sonderzeichen werden unterstützt?
Verwenden Sie mysqli oder PDO und verwenden Sie die Parameterbindung. – aynber
Sehen Sie, wenn diese Info hilft: [http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php](http://stackoverflow.com/questions/60174/how -can-i-prevent-sql-injection-in-php) –
Es gibt zwei Interface-Bibliotheken: mysqli und PDO. Und es sieht so aus, als würden Sie PDO-unterstützte Funktionen verwenden, die in mysqli nicht unterstützt werden. Ich glaube nicht, dass mysqli benannte Platzhalter wie PDO unterstützt, z. ** ': Vorname' **. Verwenden Sie bei mysqli den positionellen Platzhalter ** '?' **. PDO hat eine ** bindValue ** -Funktion. mysqli verwendet die Funktion "bind_param" **. Siehe das Beispiel in meiner aktualisierten Antwort. – spencer7593