2016-05-27 5 views
0

Ich habe eine Funktion, um eine Einfügeabfrage zu machen, aber wenn ich mysqli_real_escape_string verwende, antwortet es nicht mit den Werten. Dies ist das Problem innerhalb der Array-Map, so dass ich nicht herausfinden kann, wie ich das lösen kann.mysqli_real_escape_string Funktioniert nicht in array_map

Server-Version: 5.6.24 - MySQL Community Server (GPL)

Meine Funktion ist:

function insertQryStr($array, $table){ 
    $insertUrl = "insert into %s(%s) values('%s')"; 
    $insertQryStr = sprintf($insertUrl, $table, implode(', ',@array_map('mysql_real_escape_string', @array_keys($array))), implode("', '", @array_map('mysql_escape_string', $array))); 
    return $insertQryStr; 
} 
+1

Was _its nicht Antwort mit der values._ bedeutet tut verwenden ??? –

+2

Sie haben '@' am Anfang der Funktionen gesetzt. Das ist der Fehlerunterdrückungsoperator. Zieh das aus und es wird dir sagen, warum es nicht funktioniert. – castis

+2

Verwenden Sie 'mysqli_' Funktionen anstelle von' mysql_escape_string' und 'mysql_real_escape_string'. – wogsland

Antwort

0

Der Aufruf array_map versagt wird, weil mysqli_real_escape_string, wenn sie als ein gebrauchtes Funktion benötigt 2 Argumente, der erste ist mysqli $linkas per the documentation.

array_map weiß nicht, eine Verbindung als erstes Argument zu übergeben. Eine bessere Methode wäre von this answer.

Um dies mit Ihrer Funktion zu verwenden, müssen Sie einen Link zur Datenbank übergeben.

function insertQryStr($array, $table, $link) { 
    array_walk($array, function(&$string) use ($link) { 
     $string = mysqli_real_escape_string($link, $string); 
    }); 

    return sprintf("insert into %s (%s) values('%s')", 
     $table, 
     implode(", ", array_keys($array)), 
     implode("', '", $array) 
    ); 
} 

Obwohl eine bessere Idee wäre, dies zu tun vor Aufruf insertQryStr() als tight coupling zu vermeiden.

, dass alle gesagt haben, statt auf diese Weise manuell zu entkommen Daten, Sie sollten überprüfen, und auf jeden Fall prepared statements

+0

Wie kann ich den 'array_walk' in meiner Funktion verwenden? –

+0

Warnung: array_map() erwartet mindestens 2 Parameter, 1 gegeben ... –

+0

wunderbar, es funktioniert .. Vielen Dank –

Verwandte Themen