2016-04-13 9 views
5

Hi im próbuje zrobić API w Perl6 korzystając Bailador, DBIish i Slang :: SQL, ale gdy próbuję użyćPerl6 API z Slang :: SQL

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

zamiast

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

nic mi nie mówi: c (oczywiście $ name == "try") Szukam godziny w Internecie, ale bez odpowiedzi. Już próbuję używać tylko synthaksów DBIish, ale kończy się to z tym samym wynikiem. Czy ktoś może mi pomóc :)?

Odpowiedz

6

Powinieneś używać właścicieli miejsc jest głównym powodem. Slang nie robi tego rodzaju cytowań, a nawet gdyby tak było, wprowadziłbyś w swoim kodzie punkt wejścia dla iniekcji typu SQL injection, chyba że uniknąłeś cudzysłowów w zmiennej.

Zamiast próbować:

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

Powodzenia aplikacji. BTW jest subreddit, który byłby zainteresowany twoimi postępami. https://www.reddit.com/r/perl6

1

Więc spróbowałem odpowiedzi Matta Oatesa, ale nic mi to nie dało (jak gdyby nic nie znalazło w DB). Ale w końcu znalazłem składnię, że spełnił swoje zadanie:

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

Chyba warto raportowania swój przykład do kwestii GitHub jeśli masz czas wolny https://github.com/tony-o/perl6-slang-sql –