2012-05-24 18 views
5

moim celem jest uzyskanie zmiennej (z php) i użycie jej w przygotowanym oświadczeniu (z mysqli), a następnie fetch_assoc. Z jakiegoś powodu ten kod nie zadziała (brak błędów). Mam rtm i nie znalazłem niczego łączącego fetch_assoc z przygotowanymi instrukcjami, więc nie jestem pewien, czy to nawet możliwe. Każda pomoc, aby uzyskać tę pracę jest doceniana, oto mój kod obecnie.mysqli przygotowane oświadczenie z fetch_assoc

$where = $_GET['section']; 
      $mysqli = mysqli_connect("localhost", "root", "","test"); 

      if($stmt = mysqli_prepare($mysqli,"SELECT title, img, active, price FROM ? ORDER by ID limit 5 ")){ 
       mysqli_stmt_bind_param($stmt, 's', $where); 
       mysqli_stmt_execute($mysqli); 
       mysqli_stmt_fetch($mysqli); 
       while($row = mysqli_fetch_assoc($stmt)){ 
        if($row['active']=="yes"){ 
         echo 'the rest of my stuff goes here'; 
+0

wybór dynamiczny stół jest zazwyczaj oznaką złej konstrukcji –

Odpowiedz

5

Na stronie internetowej PHP dla mysqli->prepare (ze szczególnym uwzględnieniem dodanego do najbardziej odpowiedniej części):

Uwaga:

Znaczniki są legalne tylko w niektórych miejscach w SQL. W przypadku przykładu są one dozwolone na liście VALUES() instrukcji INSERT (aby określić wartości kolumn dla wiersza) lub w porównaniu z kolumną w klauzuli WHERE, aby określić wartość porównania.

Jednak nie są one dopuszczone do identyfikatorów (takich jak tabela lub kolumny nazw), w liście select, że nazwy kolumn mają być zwrócone przez SELECT) lub do określenia zarówno operandy o binarny operator taki jak = równy znak. To ostatnie ograniczenie jest konieczne, ponieważ niemożliwe byłoby określenie typu parametru. Ogólnie rzecz biorąc, parametry są dozwolone tylko w instrukcjach języka Data Manipulation Language (DML) , a nie w instrukcjach DDL (Data Definition Language).

Zakładając, że można ominąć ten problem, korzystanie z mysqli jest nieco zdezorientowane. Poprawnie wiążesz parametry i wykonujesz, ale zmiksowałeś dwa różne sposoby uzyskiwania wyników. Albo

  1. Zastosowanie mysqli_stmt_get_result pobrać zestaw wyników, a następnie użyć mysqli_fetch_assoc na to, albo
  2. Bind swoimi wynikami z mysqli_stmt_bind_result, a następnie użyj mysqli_stmt_fetch pobrać następny zestaw wyników do zmiennych związanych. (Zwykle chcesz iteracyjne nad wynikami za pomocą czegoś podobnego while(mysqli_stmt_fetch($stmt)){ //do stuff here }
+0

Rozumiem dzięki, myślę, że przeprojektuję moją bazę danych, następnie – PinheadLarry

+0

@PinheadLarry Okay, dodałem trochę o używaniu przygotowanych stwierdzeń, ponieważ twoje użycie w przykładowym kodzie nie wydaje się być całkiem poprawne. – Gareth

-1

Innym sposobem styl, możemy zapisać je poniżej.

$mysqli=new mysqli("host","user","pass","db"); 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param('s', $variable); 
$stmt->execute(); 
$result = $stmt->get_result(); 
while($row = $result->fetch_assoc()){ 
.... 
} 
Powiązane problemy