Przejdź do głównej zawartości

Posty

Wyświetlanie postów z sierpień, 2011

Rekurencyjne zliczanie linii kodu w dużych projektach

Celem zliczenia linii kodu z wszystkich plików znajdujących się w jednym katalogu możemy użyć prostej komendy: wc -l *.java Powyższe polecenie policzy linie kodu znajdujące się w pliczkach z rozszerzeniem java. Co jednak jeśli chcemy policzyć linie z całego projektu, który podzielony jest na bardzo wiele katalogów? Polecam użyć połączenia komend "wc" oraz "find" w taki oto sposób: wc -l `find . -name \*.java -print` Wywołując to polecenie w katalogu głównym naszego projektu powinniśmy uzyskać informacje o całkowitej liczbie linii kodu zawartych w plikach *.java z całego projektu (łącznie z podkatalogami). Artykuł udostępniany na licencji CC-BY-SA-3.0

Konkatenacja w zapytaniach SQL a bindowanie przez "?"

Ostatnio w kodzie pewnego programisty znalazłem dosyć ciekawy błąd. Wynikał on z różnego sposobu podpinania parametrów do zapytania UPDATE (SQL). Wartości pól po "SET" były bowiem konkatenowane, natomiast część po słowie kluczowym "WHERE" bindowana przez znaki zapytania. Mniej więcej wyglądało to tak (pół-pseudokod): <?php $set = ' user_id =' . escape ( $user_id ) . ' ' ; ( ... ) if ( isset ( $_POST [ 'comment' ])) { $set .= ', comment="' . escape ( $_POST [ 'comment' ]) . '"' ; } query ( 'UPDATE `tabela` SET ' . $set . ' WHERE id=? ' , $id ); ?> Cały szkopuł polegał na tym, że w momencie, kiedy w którejkolwiek wartości podpiętej w zmiennej $set pojawił się znak zapytania (bo użytkownik np. chciał zadać pytanie), to do tego znaku zapytania została zbindowana zmienna $id i finalne zapytanie wyglądało np. tak : UPDATE ` tabela ` SET ` user_id `= 5 ,