Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PDO - postgres bytes
hettmix
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

Ostrzeżenie: (0%)
-----


Witam.

Próbuję pobrać z bazy postgres dane typu bytes (zdjęcie w formacie jpeg):
  1. <?php
  2.  
  3. try{
  4. $db = new PDO('pgsql:host=173.225.xx.xx;dbname=xxxxxx', 'postgres', 'xxxxxxxxxxx');
  5. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6. $db->exec("SET CLIENT_ENCODING TO 'UTF8'");
  7. }
  8. catch (PDOException $e)
  9. {
  10. print "Błąd połączenia z bazą!: " . $e->getMessage() . "<br/>";
  11. die();
  12. }
  13.  
  14. $bif_id = trim($_GET['bif_id']);
  15.  
  16.  
  17. if ($_GET['bif_id']) {
  18.  
  19. $sql="SELECT jpeg_zdjecie from zdjecia_p where (bif_id='".$bif_id."')";
  20. $sqh=$db->query($sql);
  21. $sqh->execute(array($_GET['bif_id']));
  22. $data=$sqh->fetchAll(PDO::FETCH_NUM);
  23. $data=$data[0][0]; // print($data) here will just return "Resource id #"
  24. //print $data;
  25. //header('Content-Type: image/jpeg');
  26. $data=fgets($data);
  27. print $data;
  28.  
  29. }
  30.  
  31. ?>

W efekcie otrzymuję tylko fragment danych
[txt]
����JFIF``��C 
[/txt]
Jak to ugryźć ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. if($_GET['bif_id']){

Do sprawdzenia czy zmienna istnieje służy isset()

  1. $sql="SELECT jpeg_zdjecie from zdjecia_p where (bif_id='".$bif_id."')";
  2. $sqh=$db->query($sql);
  3. $sqh->execute(array($_GET['bif_id']));

Najpierw się przygotowuje zapytanie, a potem wykonuje. Ty dałeś query a potem execute co mija się z celem.

  1. $data=$sqh->fetchAll(PDO::FETCH_NUM);
  2. $data=$data[0][0];

Strasznie komplikujesz sobie życie.


Ja bym zrobił to tak:
  1. if(isset($_GET['bif_id'])){
  2. $sqh=$db->prepare("SELECT jpeg_zdjecie from zdjecia_p where bif_id=:bif_id");
  3. $sqh->bindValue(':bif_id', $_GET['bif_id'], PDO::PARAM_INT); //Jak mniemam ID=integer dlatego INT
  4. $data=$sqh->fetch();
  5. $data=file_get_contents($data["jpeg_zdjecie"]);
  6. echo $data;
  7. }
Go to the top of the page
+Quote Post
hettmix
post
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

Ostrzeżenie: (0%)
-----


Cytat(Turson @ 13.11.2013, 00:21:18 ) *
  1. if($_GET['bif_id']){

Do sprawdzenia czy zmienna istnieje służy isset()

  1. $sql="SELECT jpeg_zdjecie from zdjecia_p where (bif_id='".$bif_id."')";
  2. $sqh=$db->query($sql);
  3. $sqh->execute(array($_GET['bif_id']));

Najpierw się przygotowuje zapytanie, a potem wykonuje. Ty dałeś query a potem execute co mija się z celem.

  1. $data=$sqh->fetchAll(PDO::FETCH_NUM);
  2. $data=$data[0][0];

Strasznie komplikujesz sobie życie.


Ja bym zrobił to tak:
  1. if(isset($_GET['bif_id'])){
  2. $sqh=$db->prepare("SELECT jpeg_zdjecie from zdjecia_p where bif_id=:bif_id");
  3. $sqh->bindValue(':bif_id', $_GET['bif_id'], PDO::PARAM_INT); //Jak mniemam ID=integer dlatego INT
  4. $data=$sqh->fetch();
  5. $data=file_get_contents($data["jpeg_zdjecie"]);
  6. echo $data;
  7. }

Niestety, ale w dalszym ciągu dostaję komunikat: file_get_contents(): Filename cannot be empty

Cytat(nospor @ 12.11.2013, 18:18:26 ) *
Bo panie kolego do bazy wstawiles totalnie zle dane (IMG:style_emoticons/default/smile.gif) Kod na pobieranie danych z bazy jest ok. To kod na dodawanie danych do bazy jest zly

Poniżej działający kod z aplikacji, która obsługuje bazę postgres:
  1. <?
  2.  
  3.  
  4. $dbh = db_connect("host=".$host." dbname=".$database." user=".$_SESSION['username']." password=".$_SESSION['password']);
  5.  
  6.  
  7. $res=db_query($dbh,"SELECT length(jpeg_zdjecie) from zdjecia_p where (bif_id='".$bif_id."');");
  8. $r=db_fetch_row($res);
  9.  
  10. if ($r[0]>0) {
  11.  
  12. $res=db_query($dbh,"SELECT jpeg_zdjecie from zdjecia_p where (bif_id='".$bif_id."');");
  13. $res=db_fetch_row($res);
  14. $bif=stripcslashes($res[0]);
  15.  
  16. $jpeg=$bif;
  17.  
  18. }
  19.  
  20.  
  21. header("Content-Disposition: inline; filename=".$bif_id.".jpeg");
  22. header("Content-type: image/jpeg");
  23.  
  24. print $jpeg;
  25.  
  26. db_close($dbh);
  27. ?>

oraz zrzut pola jpeg_zdjecie z programu phpPgAdmin:
dump postgres - jpeg_zdjecie
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.12.2025 - 07:56