2016-04-13 16 views
5

Hi im cercando di fare un'API in Perl6 utilizzando Bailador, DBIish e Slang :: SQL, ma quando provo ad usarePerl6 API con Slang :: SQL

sql select * from user where nom='"$name"'; do -> $row { 
     "$row".say; 
} 

invece di

sql select * from user where nom="try"; do -> $row { 
     "$row".say; 
} 

non mi dice nulla: c (ovviamente $ name == "try") Cerco ore su internet ma senza risposta. Cerco già di usare solo synthax DBIish ma finisce con lo stesso risultato. Qualcuno può aiutarmi :)?

risposta

6

Si dovrebbe usare i segnaposto è il motivo principale per cui. Il gergo non fa citazioni di quel tipo, e anche se lo fosse avresti introdotto un punto di ingresso per un exploit di SQL injection nel tuo codice - a meno che non fuggissi da virgolette nella variabile.

Invece di cercare:

sql select * from user where nom = ?; with ($name) do -> $row { 
    $row.say; 
} 

Buona fortuna con la vostra applicazione. A proposito c'è un subreddit che sarebbe interessato ai tuoi progressi https://www.reddit.com/r/perl6

1

Così ho provato la risposta di Matt Oates ma non mi ha restituito nulla (come se non avesse trovato nulla nel DB). Ma ho finalmente trovato la sintassi che ha fatto il lavoro:

my $email = request.params<email>; 
my $db = 'SELECT * FROM user WHERE email=?'; 
my $do = $*DB.prepare($db); 
$do.execute($email); 
my %row = $do.fetchrow_hashref; 
return (%row); 
+0

probabilmente vale la pena riferire il tuo esempio alle questioni GitHub se avete il tempo libero https://github.com/tony-o/perl6-slang-sql –