2012-05-24 44 views
5

mi objetivo aquí es poder obtener una variable (con php) y usarla en una declaración preparada (con mysqli), y luego fetch_assoc. Por alguna razón, este código no funcionará (no hay errores). Tengo rtm y no he encontrado nada que combine fetch_assoc con declaraciones preparadas, por lo que no estoy seguro si es posible. Cualquier ayuda para que funcione esto es apreciada, aquí está mi código actualmente.declaración preparada de mysqli con 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

de selección de tabla dinámica es generalmente una indicación de un mal diseño –

Respuesta

5

Desde la página web de PHP para mysqli->prepare (con énfasis añadido a la parte más relevante):

Nota:

Los marcadores son legales sólo en ciertos lugares en las instrucciones SQL. Para el ejemplo , están permitidos en la lista VALUES() de una instrucción INSERT (para especificar valores de columna para una fila), o en una comparación con una columna en una cláusula WHERE para especificar un valor de comparación.

Sin embargo, no se les permite a los identificadores (tales como tabla o columna nombres), en la lista de selección que los nombres de las columnas a ser devueltos por una instrucción SELECT ), o para especificar los dos operandos de un operador binario como el = signo igual. La última restricción es necesaria porque sería imposible determinar el tipo de parámetro. En general, los parámetros son legales solo en las sentencias del lenguaje de manipulación de datos (DML) , y no en las sentencias del lenguaje de definición de datos (DDL).

Suponiendo que puede superar ese problema, su uso de mysqli es un poco confuso. Vincula correctamente sus parámetros y ejecuta, pero ha mezclado dos formas diferentes de obtener sus resultados. De cualquier

  1. Uso mysqli_stmt_get_result en busca de establecer el resultado y luego usar mysqli_fetch_assoc en eso, o
  2. Enlazar sus resultados con mysqli_stmt_bind_result, y luego usar mysqli_stmt_fetch a buscar el siguiente conjunto de resultados en sus variables ligadas. (Por lo general, que le iterar sobre los resultados de usar algo como while(mysqli_stmt_fetch($stmt)){ //do stuff here }
+0

veo, gracias, supongo que voy a rediseñar mi base de datos entonces – PinheadLarry

+0

@PinheadLarry Bien, he agregado un poco sobre el uso de declaraciones preparadas porque su uso en su código de ejemplo no parece ser el correcto. – Gareth

-1

Otro estilo manera, se puede escribir a continuación:.

$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()){ 
.... 
} 
Cuestiones relacionadas