Einfache Anführungszeichen in Mysql speichern

SebiPuck

Erfahrenes Mitglied
Hallo, ich habe ein kleiner Problem.
In meinem Forum kann ich keine Antwort erstellen (und auch kein Thema) welches mehr als ein einfaches Anführungszeichen im Text beinhaltet. ( das hier: ' ).
Der abzuspeichernde String entsteht aus der Eingabe in eine Textbox. Mein Script:

Code:
if(isset($_POST["text"])){
                            $text = htmlspecialchars($_POST["text"]);
                          
                            require 'functions/textCodes.php';
                            $text = url2linkAndImgurToPic($text);
                            $date = date('Y-m-d');
                          
                            $conn = new mysqli("$host", "$user", "$pass", "$db");
                          
                            $errors = array();
                            if(strlen($text) > 2){
                          
                             /* Create a prepared statement */
                               if($stmt = $conn -> prepare("INSERT INTO TABLE (spalte1, spalte2, spalte3, spalte4) VALUES ('$post_id', '$current_user', '$text', '$date')")) {

                                  /* Bind parameters
                                     s - string, b - blob, i - int, etc */
                                  $stmt -> bind_param("s", $text);

                                  /* Execute it */
                                  $stmt -> execute();

                                  /* Bind results */
                                  $stmt -> bind_result($result);

                                  /* Fetch the value */
                                  $stmt -> fetch();
                                  
                                    $jumpto = $conn->insert_id;
                                  
                                  /* Close statement */
                                  $stmt -> close();
                               }
}

Ich verstehe nicht, warum das Ganze nicht funktioniert.
Danke im Voraus,
LG
 
Du solltest dringend diese Software aktualisieren, den "register_globals" gibt es schon eine ganze Zeit lang nicht mehr, oder sind die Variablen aus Zeile 14 irgendwo deklariert?
Das direkte Arbeiten mit Server-Vars ($_POST, $_GET usw.) sollte man auch so gut es geht unterbinden.
Variablen, welche in einer SQL-Query vorkommen, sollten mit "mysqli_real_escape_string" behandelt werden
 
verstehe ich jetzt nicht ganz.
zeile 14:
Code:
                   if($stmt = $conn -> prepare("INSERT INTO TABLE (spalte1, spalte2, spalte3, spalte4) VALUES ('$post_id', '$current_user', '$text', '$date')")) {

Die einzige Variable, welche hier von Nutzen ist (welche der User durch seine Eingabe beeinflusse kann) ist die Variable "$text".
Was meinst du mit "Du solltest diese Sotware dringend akutalisieren ?"

Weiters habe ich doch schon mit prepare gearbeitet, wodurch ich doch keil mysqli_real_escape_string mehr brauche, oder ?
LG
 
[...]
Die einzige Variable, welche hier von Nutzen ist (welche der User durch seine Eingabe beeinflusse kann) ist die Variable "$text".
Was meinst du mit "Du solltest diese Sotware dringend akutalisieren ?"

Weiters habe ich doch schon mit prepare gearbeitet, wodurch ich doch keil mysqli_real_escape_string mehr brauche, oder ?
[...]

Hi,

nein, du verwendest zwar prepare, aber nicht richtig. Mit Prepare bereitest du nur die Query vor und hast darin noch keinerlei Daten. Die Query müsste in deinem Fall so aussehen:
SQL:
INSERT INTO TABLE (spalte1, spalte2, spalte3, spalte4) VALUES (?, ?, ?, ?)

Danach kannst du die ganzen Parameter sauber über bind_params setzen und abschicken. Da brauchst du dir um das escaping keine Sorgen mehr machen:
PHP:
$stmt -> bind_param("iiss", $post_id, $current_user, $text, $date);

Bei dir oben hättest du auch genau so gut ohne prepare() arbeiten können, das bind_params() war überflüssig und wurde eh ignoriert.

Grüße,
BK
 
Zuletzt bearbeitet:
könnte dies der Grund für den Fehler sein ?
(komisch, dass ich das mit dem ? vergessen hatte ^^)
LG
Probiers doch einfach aus ;)

Könnte aber wie von @bofh1337 bereits erwähnt auch an den register_globals() liegen, das dürfte je nach PHP-Version die du verwendest schon gar nicht mehr existieren. Das mysqli_real_escape_string() brauchst du bei richtigen prepare-Statements nicht mehr.

Grüße,
BK
 
sorry, aber ich kann hier nirgends register_globals() in meinem code finden ... bite sag mir mal, in welcher zeile das sein sollte
#edit das mit dem einfachen anführungszeichen funktioniert jetzt jedoch super, danke :)
 
Zuletzt bearbeitet:
Hi SebiPuck,

tut mir Leid, das steht in deinem Code tatsächlich nicht. Habe mich da rein auf den Post von bofh1337 gestützt.

Grüße,
BK
 
Wieso hast du Anführungszeichen um die Variablen in folgendem Code:
PHP:
$conn = new mysqli("$host", "$user", "$pass", "$db");

Ich habe diesen Phänomen schon so oft gesehen, kann das jemand erklären?
 
Zurück