Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prepared statements - mysqli, bind_param przekazywanie zmiennych do zapytania SQL
Forum PHP.pl > Forum > PHP > Object-oriented programming
Leopard
Chce wykonać proste zapytanie do bazy, w którym są dwie zmienne ($id, $name):

  1. <?php
  2. $mysqli = new mysqli('localhost', 'root', '', 'test1');
  3. if(mysqli_connect_errno()) {
  4.    throw new Exception(mysqli_connect_error());
  5.    exit();
  6. }
  7. $stmt = $mysqli->prepare("SELECT * FROM TEST WHERE id=? AND name=?");
  8.  
  9. $stmt->bind_param('is', $id, $name);
  10. $id = 1;
  11. $name = 'imie';
  12.  
  13. $stmt->execute();
  14. $stmt->bind_result($id, $first_name, $last_name);
  15. while ($data = $stmt->fetch()) {
  16.    echo $id . $first_name . $last_name . '<br />';
  17. }
  18. ?>


Wyskakuje mi błąd:
Fatal error: Call to a member function bind_param() on a non-object in C:\wamp\www\eOOP\mysqli.php on line 10
(w linii z bind_param)

Kiedy daje w zapytanie jedną zmienną to wszystko jest ok:

  1. <?php
  2. ...
  3. $stmt = $mysqli->prepare("SELECT * FROM TEST WHERE id=?");
  4.  
  5. $stmt->bind_param('i', $id);
  6. $id = 1;
  7.  
  8. $stmt->execute();
  9. ...
  10. ?>


bind_param z dwoma zmiennymi chyba piszę dobrze bo w manualu jest taki przykład:

  1. <?php
  2. $stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
  3. $stmt->bind_param('sssd', $code, $language, $official, $percent);
  4.  
  5. $code = 'DEU';
  6. $language = 'Bavarian';
  7. $official = "F";
  8. $percent = 11.2;
  9. ?>


Gdzie robię błąd?
megawebmaster
Skoro wywala Ci błąd o brak obiektu stmt to chyba rozwiązanie jest proste - coś Ci nie zwraca $mysqli->prepare() obiektu MySQLi_Statement. Musisz coś w tym kierunku kombinować. Ja tutaj akurat nie mam zbyt dużego doświadczenia.
Leopard
Dzięki,
wstyd się przyznać, miałem literówkę w nazwie pola "name" w bazie danych worriedsmiley.gif , kod jest ok.
dr_bonzo
Dlatego rzucanie wyjatkow przez baze danych jest co najmniej pomocne (inaczej kazde ->prepare() musisz sprawdzac sam IF'em).
Cytat
mysqli_prepare() returns a statement object or FALSE if an error occured.

Jesli zapytanie sie nie uda to ci od razu to pokaze, w dodatku z komunikatem mysql.
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.