Wpis z mikrobloga

$dupa->a->b = 'abcd';

echo $dupa->a->b; // wyświetla abcd

$server0 = $pdo->exec("
INSERT INTO
aso_statuses
SET
statuses_date = NOW(),
statuses_content_addition = '$dupa->a->b',
"); // Nie wykonuje, bo $dupa->a->b jest puste

Dlaczego dane z "głębokiego obiektu" w #php działają przy echo, a do #mysql dane nie wchodzą?

#programowanie
  • 19
  • Odpowiedz
@lutecki: bo z wypowiedzi @zakopiak - nie wiadomo, kiedy coś jeszcze jest zmienną, a co już jest częścią stringa.

Prostym, ale kującym w oczy sposobem jest dodanie zmiennej w stringu w klamerki:

statusescontentaddition
  • Odpowiedz
@lutecki: Nie wykonuje się nie dlatego, że $dupa->a->b jest puste, tylko dlatego, że używasz złej składni. Nie można tak wrzucać pól czy funkcji obiektów do stringa. Masz dwie opcje:

$string = "blabla{$dupa->a->b}blabla";
Albo

$string =
  • Odpowiedz
@MrDracek: bindowanie zmiennych i nie pisanie kodu który jest podatny na sql injection to jest podstawa, dobrych praktyk trzeba się uczyć od samego początku i je trzeba promować, bo potem pojawi się na produkcji kod z dziurami np
  • Odpowiedz
@MrDracek: niby czemu unikanie korzystania z pdo to dobra praktyka ? xd bardzo dziwny argument, przecież to podstawowe narzędzie do komunikacji z bazami danych w PHP
  • Odpowiedz
@Jurigag: ogólnie nawet prosta sugestia o zrezygnowanie z exec bezpośrednio przez PDO to dobrze pokazuje: jak mam już 100 różnych zapytań bezpośrednio w PDO i mam teraz zmienić 80% z nich żeby uniknąć mysql injection - to już jest dług technologiczny dla nawet prostego kodu.
  • Odpowiedz