Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] PDO bindValue
Forum PHP.pl > Forum > Przedszkole
eFK
Witam serdecznie.

Od kilku dni zawzięcie walczę z PDO i jak na razie zrozumiałam tylko, że sama nie wygram :-D
A mój problem jest zapewne banalny.

Mam bardzo prosty kod składajacy się z formularza oraz fragmentu mającego wyszukiwać dane z bd względem tego, co wpisano do formularza.
  1.  
  2. <html>
  3. <head>
  4. </head>
  5. </head>
  6. <body>
  7.  
  8. <form method="post" action="browsery.php" name="">
  9. <table>
  10. <tr>
  11. <td>nazwisko:</td>
  12. <td><input type="text" name="searchsurname"></td>
  13. </tr><tr>
  14. <td>imię:</td>
  15. </tr>
  16. </table>
  17. <input type="submit" name="" value="WYSZUKAJ"></input>
  18. </form>
  19.  
  20. </body>
  21. </html>
  22.  
  23. <?php header('Content-Type: text/html; charset=utf-8');
  24.  
  25. try
  26. {
  27. include 'conn.php';
  28.  
  29.  
  30. $stmt -> bindValue(':browsersurname', $_POST['searchsurname'], PDO::PARAM_STR);
  31. $stmt -> execute();
  32. $stmt -> closeCursor();
  33.  
  34.  
  35. $stmt = $pdo->query("SELECT surname FROM form WHERE `surname` = :searchsurname"); //tutaj mam problem, nie wiem jak w PDO porównać surname z $_POST['searchsurname']
  36.  
  37. foreach($stmt as $row);
  38. {
  39. echo $row['surname'];
  40. }
  41. $stmt->closeCursor();
  42.  
  43. }
  44. catch(PDOException $e)
  45. {
  46. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  47. }
  48. ?>


Przeglądajac strony o PDO początkowo sądziłam, że da się to zrobić przy wykorzystaniu bindValue, chociaż teraz, gdy po nieudanych próbach jeszcze bardziej próbowałam zagłębić się w problem, już sama nie wiem. Początkowo sądziłąm że bindValue przygotowywuje coś jakby zmienną, ale która może zawierać w sobie więcej niź zwykłą zmienna, a głównie zapytania kierowane do bd. A ja chciałam by zawierałą $_POST[].
Ale chyba tak się nie da :-D
Stąd moje proźby: czy mógłby mi ktoś wyjaśnić, oczywiście na tak zwany chłopski rozum, o co chodzi z bindValue oraz jak w PDO porównać pola ze $_POST[].
Turson
  1. $stmt -> bindValue(':browsersurname', $_POST['searchsurname'], PDO::PARAM_STR);
  2. $stmt -> execute();
  3. $stmt -> closeCursor();
  4.  
  5. $stmt = $pdo->query("SELECT surname FROM form WHERE `surname` = :searchsurname");

O co tu chodzi? Nie dość, że zła kolejność to bindujesz inne dane, a na dodatek nie przygotowujesz zapytania (prepare) a już je wykonujesz (query)
ZaXaZ
jak słusznie zauważył Turson
Cytat
nie przygotowujesz zapytania (prepare) a już je wykonujesz (query)


nie wiem jak inni ale bindValue ja widzę tak:
$stmt->bindValue(':x', 'yyy');
a bindParam tak:
$stmt->bindParam(':x', $y);


zrób tak:

  1. $stmt=$pdo->prepare('SELECT ... FROM `tabela` WHERE ...=:srearchsurname;');
  2. $stmt->bindParam(':searchsurname', $_POST['searchsurname'], PDO::PARAM_STR);
  3. $stmt->execute();
  4. $stmt->closeCursor();
  5. $zmienna = $stmt->fetch(PDO::FETCH_ASSOC); #w tablicy;
  6.  
  7.  
  8. $stmt2 = $pdo->query('SELECT surname FROM form WHERE `surname` ='.$zmienna['klucz tego czego szukasz w prepare'])->fetch(PDO::FETCH_ASSOC); #w tablicy.


(podmieniając za dokładnie te linijki co w poscie Turson'a
Turson
Cytat(ZaXaZ @ 28.04.2014, 23:39:23 ) *
nie wiem jak inni ale bindValue ja widzę tak:
$stmt->bindValue(':x', 'yyy');
a bindParam tak:
$stmt->bindParam(':x', $y);

W bindValue też możesz wstawić zmienną.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.