2012-05-24 20 views
5

Mein Ziel ist es, in der Lage zu sein, eine Variable (mit PHP) zu bekommen und sie in einer vorbereiteten Anweisung (mit mysqli) und dann fetch_assoc zu verwenden. Aus irgendeinem Grund wird dieser Code nicht funktionieren (keine Fehler). Ich habe rtm und ich habe nichts gefunden, was fetch_assoc mit vorbereiteten Anweisungen kombiniert, also bin ich mir nicht sicher, ob es überhaupt möglich ist. Irgendwelche Hilfe, um dieses Arbeiten zu bekommen, wird geschätzt, hier ist mein Code zurzeit.mysqli vorbereitete Anweisung mit 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

dynamische Tabellenauswahl ist in der Regel ein Hinweis auf schlechtes Design –

Antwort

5

Von der PHP-Website-Seite für mysqli->prepare (mit Schwerpunkt auf den wichtigsten Teil hinzugefügt):

Hinweis:

Der Marker die geltende Rechtslage nur an bestimmten Stellen in SQL-Anweisungen. Für sind sie beispielsweise in der VALUES() - Liste einer INSERT-Anweisung zulässig (um Spaltenwerte für eine Zeile anzugeben) oder in einem Vergleich mit einer Spalte in einer WHERE-Klausel, um einen Vergleichswert anzugeben.

Sie sind jedoch nicht für Bezeichner (wie Tabellen- oder Spalten Namen), in der Auswahlliste erlaubt, die Namen der Spalten durch eine SELECT-Anweisung) oder geben Sie beide Operanden zurückgegeben werden ein binärer Operator wie das = Gleichheitszeichen. Die letzte Einschränkung ist notwendig, weil es unmöglich ist, den Parametertyp zu bestimmen. Im Allgemeinen sind Parameter nur in DML-Anweisungen (Data Manipulation Language) und nicht in DDL-Anweisungen (Data Definition Language) zulässig.

Angenommen, Sie können über dieses Problem hinaus kommen, Ihre Verwendung von mysqli ist ein wenig verwirrt. Sie binden Ihre Parameter korrekt und führen sie aus, aber Sie haben zwei verschiedene Wege durcheinander gebracht, um Ihre Ergebnisse zu erhalten. Entweder

  1. Verwenden mysqli_stmt_get_result das Ergebnis gesetzt holen und dann verwendet mysqli_fetch_assoc auf das, oder
  2. Binden Sie Ihre Ergebnisse mit mysqli_stmt_bind_result und dann mysqli_stmt_fetch verwenden Sie den nächsten Satz von Ergebnissen in der gebundenen Variablen zu holen. (In der Regel würden Sie über die Ergebnisse iterieren etwas mit wie while(mysqli_stmt_fetch($stmt)){ //do stuff here }
+0

ich sehe, Danke, ich denke, ich werde meine Datenbank dann neu gestalten – PinheadLarry

+0

@PinheadLarry Okay, ich habe ein wenig über die Verwendung von vorbereiteten Anweisungen hinzugefügt, weil Ihre Verwendung in Ihrem Beispiel-Code nicht ganz richtig zu sein scheint. – Gareth

-1

Ein anderer Weg, um Stil, können wir es unten schreiben.

$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()){ 
.... 
} 
Verwandte Themen