2017-04-25 2 views
0

Ich versuche, Daten in eine Tabelle einzufügen, die sowohl Anführungszeichen als auch doppelte Anführungszeichen enthält. Wie kann ich ihnen entkommen?Mysql PHP einfügen mit Anführungszeichen und Anführungszeichen

Der Wert i hinzugefügt werden soll ist:

default=1,name='Bob',lastName="Jones" 


$ins = "INSERT into table (field1,field2,fiel3,) values ('data1','data2',????)"; 

Wenn ich Apostroph verwenden, wird der Bob Teil gebrochen. Wenn ich ein Anführungszeichen verwende, wird der Jones-Teil gebrochen.

Wenn ich mysql_escape_string verwende, wie würde das aussehen?

$data3 = mysql_escape_string(????); 

Wenn ich ein einzelnes Zitat verwende, wird der Bob Teil gebrochen. Wenn ich ein Anführungszeichen verwende, wird der Jones-Teil gebrochen.

Ich kenne es ein schreckliches db-Design, aber ich habe keine Kontrolle über die Felder, die ich hinzufügen oder die Syntax der Werte. Ich muss den Wert genau wie oben gezeigt einfügen.

+0

Ich bin nur neugierig, warum Sie das tun wollen würde. –

+6

** ACHTUNG **: Wenn Sie nur PHP lernen, lernen Sie bitte nicht die veraltete [mysql_query'] (http://php.net/manual/en/function.mysql-query.php) Schnittstelle. Es ist schrecklich und wurde in PHP 7 entfernt. Ein Ersatz wie [PDO ist nicht schwer zu erlernen] (http://net.tutsplus.com/tutorials/php/why-you-should-beusing-phps-pdo- for-database-access /) und ein Leitfaden wie [PHP The Right Way] (http://www.phptherightway.com/) hilft Best Practices zu erklären. Machen Sie ** sicher ** Ihre Benutzerparameter sind [richtig maskiert] (http: // bobby-tables.com/php) oder Sie werden mit schweren [SQL injection bugs] (http://bobby-tables.com/) enden. – tadman

+0

@ Fred-ii- weil die db, dem ich Daten hinzufüge, von clowns entworfen wurde .... irgendein guter db würde Feld 3 in einzelne Felder, aber nicht diese db trennen ..... – bart2puck

Antwort

2

Verwenden Sie vorbereitete Anweisungen

Schauen Sie sich das an.

Sie zuerst mit verbesserten mysqli

$mysqli = new mysqli($servername, $username, $password); 

$stmt = $mysqli->prepare("INSERT into table (field1,field2,fiel3,) values (?,?,?)"); 
$stmt->bind_param("sss",$data1,$data2,$data3); 
$stmt->execute(); 

Wo $mysqli Ihr Anschluss ist.

Auf diese Weise haben Sie auch von SQL Injection verhindert.

+0

Tolles Beispiel, genau, wie es mit 'mysqli' gemacht werden sollte. – tadman

+0

Yeah! Lemme bearbeiten, um Connector zu zeigen –

+2

Dort hat er jetzt die ganze Lösung. –

2

Von dem, was ich gelesen habe mysql_* Funktionen sind ab PHP 7 veraltet, und von dem, was ich verstehe, können Sie Zitate nicht entkommen. Zumindest nicht richtig. Ich würde Ihnen empfehlen, zu PDO zu gehen, da es mit verschiedenen Datenbanktypen kompatibel ist, und es ist meiner Meinung nach einfacher zu verwenden als die mysqli_* Funktionen. Ich werde Sie wissen lassen, dass mysqli in der Lage ist, Zitate zu umgehen.

Da es bereits eine Antwort mit einem Mysqli Beispiel, hier ist ein kurzes Beispiel PDO die Verwendung von Anführungszeichen zu entkommen:

$dns = "mysql:dbname=test;host=localhost"; 
$user = "root"; 
$password = ""; 

$connection = new PDO($dns, $user, $password); 

$sql = "INSERT INTO users (username, password) VALUES (:username, :password)"; 
$statement = $connection->prepare($sql); 
$statement->execute([ 
    ':username' => $username, 
    ':password' => $password 
]); 

Vergisst diese Zitate nur entkommt, es filtert nicht Ihre Eingaben. Bevor Sie also fremde Daten (Formulardaten) einfügen, verwenden Sie die Funktion filter_var() basierend auf dem, was Sie filtern möchten, z. B .: $string = filter_var($string, FILTER_SANITIZE_STRING). Oder Sie tun können:

$statement->bindParam(':username', $username, PDO_PARAM_STRING); 
0

Nur eine kleine Funktion, die die ursprüngliche mysql_real_escape_string ahmt die aber keine aktive MySQL-Verbindung benötigen. Kann als statische Funktion in einer Datenbankklasse implementiert werden. Hoffe es hilft jemandem.

<?php 

function mysql_escape_mimic($inp) { 

    if(is_array($inp)) 
     return array_map(__METHOD__, $inp); 

    if(!empty($inp) && is_string($inp)) { 
     return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp); 
    } 

    return $inp; 
} 
?> 

Quelle: php manual

Verwandte Themen