• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

do zapytań z PDO

Object Storage Arubacloud
+2 głosów
294 wizyt
pytanie zadane 26 czerwca 2015 w PHP przez makoso Mądrala (7,380 p.)
edycja 26 czerwca 2015 przez makoso

Witam próbuję stworzyć sobie klasę do pytania w którym zmieniają się dwie wartości tak aby zmniejszyć dalszy kod moja wiedzą OOP jest praktycznie 0 bo wczesniej nie chciałem tego stosować i cały czas piszę strukturalnie :)

stworzyłem sobie coś takiego napewno źle bo nie działa pytanie czy możecie mi jakoś pomóc?
sądzę że problem jak i cel jest zrozumiały

ROZWIĄZANIE by EFIK

plik pytania.php

<?php
/**
 * Created by PhpStorm.
 * User: efik
 * Date: 26.06.15
 * Time: 16:16
 */

class pytania {

    /**
     * @var PDO
     */
    private $pdo;

    /**
     * @param PDO $pdo
     */
    function __construct(\PDO $pdo)
    {
        $this->pdo = $pdo;
    }

    /**
     * @param $budynek
     * @param $budyntekLVL
     *
     * @return mixed
     */
    public function zbadaj($budynek, $budyntekLVL)
    {
         $sql = "SELECT * FROM budynki_budowa WHERE budynek = ? AND lvl = ? " ;
         $prepared = $this->pdo->prepare($sql);
         $prepared->bindParam(1,$budynek,\PDO::PARAM_STR);
         $prepared->bindParam(2,$budyntekLVL,\PDO::PARAM_INT);
         $prepared->execute();
         $data = $prepared->fetch(\PDO::FETCH_ASSOC);
         return $data;
    }
}

plik index.php

<?php
/**
 * Created by PhpStorm.
 * User: efik
 * Date: 26.06.15
 * Time: 16:16
 */
  include("pytania.php");


$host     ="host";
$user     ="user";
$db        ="db";
$pass     ="pass";
try
{
    $polacz  = new PDO("mysql:host=" . $host . ";dbname=" . $db, $user, $pass);
}
catch (PDOException $e)
{
    Echo 'wystąił błąd: '. $e->getMessage();
    exit();
}
$pytania = new Pytania($polacz);

print_r($pytania->zbadaj("dd",11));

 

1 odpowiedź

+1 głos
odpowiedź 26 czerwca 2015 przez efiku Szeryf (75,160 p.)
wybrane 26 czerwca 2015 przez makoso
 
Najlepsza

Ja bym zrobił to tak: 

Nie potrzebnie robisz 2x połączenie z bazą, lepiej jest przesłać do konstruktora aby wymagał obiektu PDO. 
Pamiętaj że metody muszą zwracać coś ( return ) 
Dodatkowo weź pod uwagę, enkapsulację, to nie jest dobry pomysł public dawać każdej zmiennej, no chyba, że masz konkretny powód.

moj plik index.php -> http://pastebin.com/uSpJawjS
plik z klasą pytania -> http://pastebin.com/LtxbaxWZ

komentarz 26 czerwca 2015 przez makoso Mądrala (7,380 p.)
WIELKIE DZIĘKI :)
co prawda blindparm jest tu chyba zbyteczny ale dzięki :D
wieczorem będą testy teraz muszę spadać :)
komentarz 26 czerwca 2015 przez efiku Szeryf (75,160 p.)
Niestety jest konieczny, bo możesz zrobić SQLInjection.
komentarz 26 czerwca 2015 przez Comandeer Guru (601,890 p.)

Pamiętaj że metody muszą zwracać coś ( return )  

A konstruktor? ;)

Przepraszam, musiałem :P 

komentarz 26 czerwca 2015 przez efiku Szeryf (75,160 p.)
edycja 26 czerwca 2015 przez efiku
Z wyjątkiem kilku metod *
hehe wiem wiem :)
komentarz 26 czerwca 2015 przez makoso Mądrala (7,380 p.)

ale jak sam tworzę co ma być w zapytaniu na "twardo" to chyba nie mogę doprowadzić do SQLInjection do wszelkich pytać co otrzymuję z GET bądź POSt używam blindparm :)

Jeszcze raz dzięki, kombinowałem z return i to też przy wyniku ale coś zwaliłem widocznie :)

komentarz 26 czerwca 2015 przez HaKIM Szeryf (87,590 p.)
A tak z innej beczki:

    public $polacz;

    public $host;

    public $db;

    public $pass;

Powinny być protected/private? Czy public to odpowienie ustawienia dla nich?
komentarz 26 czerwca 2015 przez efiku Szeryf (75,160 p.)
Ich w ogóle nie powinno być ;) Przeczytaj to co napisałem Sebastian :x
komentarz 26 czerwca 2015 przez makoso Mądrala (7,380 p.)

tak jeszcze dodam bo właśnie to stosuję :) chcę sobie wyświetlić obiektowo no i ni ***** nie idzie :) dobra to sobie print_r machnę tak jak Ty i dopiero sobie uświadomiłem że inny fetch ustawiłeś :) zaoszczędziłeś mi wiele kodu teraz zamiast :

 

				$bud_wieza					=$polacz->query("SELECT * FROM budynki_budowa WHERE budynek ='wieza' AND lvl = '$wieza_n' ");
				$bud_wieza_w				=$bud_wieza->fetch(PDO::FETCH_OBJ);
				$bud_magazyn				=$polacz->query("SELECT * FROM budynki_budowa WHERE budynek ='magazyn' AND lvl = '$magazyn_n' ");
				$bud_magazyn_w			=$bud_magazyn->fetch(PDO::FETCH_OBJ);

 

 

i dalej linijka wyśwetlania jeszcze :) będzie:

 

$pytania = new Pytania($polacz); 
echo $pytania->zbadaj("kwatera",11)->czas;

 

komentarz 26 czerwca 2015 przez HaKIM Szeryf (87,590 p.)

Bardziej się skupiłem na tej części:

to nie jest dobry pomysł public dawać każdej zmiennej

Więc zapytałem, a co z innymi ustawieniami. :)

komentarz 26 czerwca 2015 przez efiku Szeryf (75,160 p.)

makoso hmm jeżeli na sztywno to nie wiem, ja i tak bym stosował bindParam :D 
No tak dałem fetch mode na ASSOC. :)

Obiektówka zawsze spoko ;)

komentarz 26 czerwca 2015 przez makoso Mądrala (7,380 p.)
wolę obiekty chociaż ich jeszcze zbytnio nie umiem tyle co PDO sie nauczyłem miejmy nadzieję że rozpoczałeś we mnie erę OOP ;)

juz skróciłem sporo kod planuję więcej :)
komentarz 26 czerwca 2015 przez efiku Szeryf (75,160 p.)
Sam plus, że PDO !!!! :)
Jak coś, to masz forum, pytaj, OOP zawsze mile widziane :)
komentarz 26 czerwca 2015 przez makoso Mądrala (7,380 p.)
Spoko ogółem dzieki bo sporo rozy mi już pomogłeś jeszcze 2msc temu pytałem o różne rzeczy związane ze zwykły mysql :D dostawałem opierdziele że obiekty PDO podstawa :D teraz powoli to będę gryzł :)
komentarz 26 czerwca 2015 przez efiku Szeryf (75,160 p.)
Łap, może się przydać: http://pl.phptherightway.com/
komentarz 26 czerwca 2015 przez makoso Mądrala (7,380 p.)
wysyłałeś Ty albo ktoś inny mi to już kiedys wtedy potrzebowałem z tego czegoś o blindparm ale i tak się nie z tego uczyłem :)

zaraz będę kombinował zbudować sobie inną klasę wykorzystując extends od pytanie jak mi się uda to ogarnę całe moje skrypty w kilku linijkach :D
yupiiiii podoba mi się to :D

Podobne pytania

0 głosów
1 odpowiedź 349 wizyt
pytanie zadane 15 czerwca 2015 w PHP przez mopatowicz Użytkownik (560 p.)
0 głosów
3 odpowiedzi 748 wizyt
+3 głosów
4 odpowiedzi 4,302 wizyt
pytanie zadane 10 kwietnia 2015 w PHP przez Hatter Gaduła (3,180 p.)

92,596 zapytań

141,446 odpowiedzi

319,720 komentarzy

61,980 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...