03. juli 2008 - 16:04Der er
10 kommentarer og 1 løsning
sprintf med et array som argument
Hej
Jeg er i øjeblikket ved at lave en mysql_query funktion. Det den skal gøre, er at den skal escape alle variabler der medsendes som parameter. Variablerne kan nemlig komme direkte fra brugerinput.
Dette er hvad jeg har ind til videre:
function mysql_query2($sql, $fejl) { connect(); // Opret forbindelse $args = mysql_real_escape_string(func_get_args()); // Hent alle variablerne der er medgivet som paramatre
$query = sprintf($sql, $args); // Det er her jeg sidder fast
$result = mysql_query($query) or die($fejl); close(); // Luk forbindelse }
Som det ser ud lige nu, tager den jo også de to første parametre til funktionen med, når den skal til at samle querien. Det er heller ikke meningen, men det kan jeg selv fikse. Mit største problem er altså hvordan jeg kan lave den sprintf() funktion så den tager x antal parametre med.
Sql-sætningen kunne se nogenlunde sådan ud: INSERT INTO table (felt1,felt2) VALUES ('%d','%d')
:D Du tror/kender ikke nogen funktion der kan gøre det?
Så kan det jo være man skulle prøve en regex løsning. Hvis nu sql-stregen ser sådan ud:
INSERT INTO tabel (felt1,felt2,felt3,felt4) VALUES (%s,%s,%s,%s)
Kunne man så ikke lave funktionen alá dette:
for(i = 2; $i < func_num_args; $i++) // De første parametre til denne funktion skal ikke medtages { $patterns[] = "%s"; $replacements[] = args($i); } $query = preg_replace($patterns, $replacements, $sql);
Jeg ved ikke lige hvordan array'et replacements skal sorteres for at det virker.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.