Mysql Insert Syntax error

serializable

Mitglied
Hallo zusammen,

ich habe ein kleines Import Programm geschrieben, welches ziemlich viele Datensätze in eine MySQL DB einträgt. Hierbei ergeben einige Datensätze Fehlermeldungen.

Kann es sein, dass Sonderzeichen, wie 's oder "Name" oder '' (Single Quotes) dafür verantwortlich sind.

Ich trage eine Text ein mit diversen Sonderzeichen und erhalte eine Fehlermeldung. Woran kann es liegen. Kann ich vielleicht in PHOP bestimmen, dass der text nicht interprätiert wird.

Liegt es möglicherweise am Charset ind er DB selbst. Ich tappe hier im Dunkeln.

Also , die Zeichen : "" '' 's sollen keine Fehler verursachen ...

Hat hier jemand eine Idee?

VG
 
Sonderzeichen sollten generell maskiert werden, wenn es nicht von PHP über magic_quotes selbst übernommen wird.
PHP:
$str = addslashes($str);
 
Hier einmal mein Insert:

PHP:
$query ="INSERT INTO story ( storyid, name, catchline, words, section, rundate, text, textlength)" .
			" VALUES " .
			"( '.$array[id].', 'mysql_real_escape_string($array[name])'," .
			" 'mysql_real_escape_string($array[catchline])', " .
			"'$array[words]'," .
			" '$array[section]'," .
			" '$array[rundate]'," .
			" 'mysql_real_escape_string($array[text])', " .
			"'.$array[textlength].')";
 
Naja, den Fehler siehst du ja sicherlich jetzt selbst. Du hast die Funktion, die zur Behebung solcher Fehler zuständig ist im String eingeschlossen:

PHP:
"( '.$array[id].', 'mysql_real_escape_string($array[name])'," .

So gibt 's keine Escapezeichen für den String $array["name"]. Das heißt es sollte so:

PHP:
"( '$array[id]', '" . mysql_real_escape_string($array[name]) . "'," .

Nun sieht man deutlich wie der Befehl ausgeführt wird, statt als Teil des Strings interpretiert zu werden.
Auch die Punkte links und rechts von $array["id"] waren sinnlos. Das musst du für alle weiteren Stellen im Script natürlich auch beachten.
Sieh dir deine Tabelle an, da dürfte ganz oft nun mysql_real_escape stehen vor dem eigentlichen Eintrag.
 
Zuletzt bearbeitet:
PHP:
$query = 'INSERT INTO story ( storyid, name, catchline, words, section, rundate, text, textlength)' .
            ' VALUES (' .
            (int)$array['id'] . ', "' .mysql_real_escape_string($array['name']) . '", "' .
            ' "' . mysql_real_escape_string($array['catchline']) . '", ' .
            ' "' . mysql_real_escape_string($array['words']) . '", ' .
            ' "' . mysql_real_escape_string($array['section']) . '", ' .
            ' "' . mysql_real_escape_string($array['rundate']) . '", ' .
            ' "' . mysql_real_escape_string($array['text']) . '", ' .
            ' "' . (int)$array[textlength] . ')';
 
Danke erst einmal... Leider bekomme ich gerade noch eine Fehlermeldung:

Access denied for user yyyy (using password : no) Vor dem Einsatz der Funktion
mysql_real_escape_string() war noch alles in Ordnung...

Ich nutze mysqli

Also: $this-> mysqli->query($query);
 
Dann verwende $this->real_escape_string() statt mysql_real_escape_string().

//edit:
Wenn schon mysqli, dann so ungefähr:
PHP:
        $query = '  INSERT INTO
                        story
                    (
                        storyid,
                        name,
                        catchline,
                        words,
                        section,
                        rundate,
                        text,
                        textlength
                    )
                    VALUES
                    (
                        ?, ?, ?, ?, ?, ?, ?, ?
                    )';
        $insert = $mysqli->prepare( $query );
        $insert->bind_param( 'issssssi',
                             $array['id'],
                             $array['name'],
                             $array['catchline'],
                             $array['words'],
                             $array['section'],
                             $array['rundate'],
                             $array['text'],
                             $array['textlength'] );
        $insert->execute();
 
Zuletzt bearbeitet:
Was jetzt geht ist

PHP:
$array[name] = addslashes($array[name]);
$array[catchline] = addslashes($array[catchline]);
$array[text] = addslashes($array[text]);

$this->real_escape_string() Das behebt den Fehler, danke.....


das prepared Statement muss ich mir mal anschauen, danke
 
Zurück