2010-07-07 3 views
0

si je veux mettre à jour les données via stmt préparé chaque boucle de requête, mais pourquoi échoue. le msg d'erreur est « Toutes les données doivent être extraites avant une nouvelle instruction de préparation a lieu »php préparé problème stmt - mettre à jour les données à chaque boucle de résultat

$link = mysqli_connect("localhost", "admin", "", "test"); 

if (!$link) { 
    die('Connect Error: ' . mysqli_connect_error()); 
} 

//field_1 is PK 

if ($stmt = mysqli_prepare($link, "SELECT field_1, field_2 FROM table_data")) { 
    mysqli_stmt_execute($stmt);  
    mysqli_stmt_bind_result($stmt, $col1, $col2);  

    while (mysqli_stmt_fetch($stmt)) {  
    $updateC= "update table_data set field_3=? where field_1=?"  

    if ($stmt2= mysqli_prepare($link, $updateC)) { 
     mysqli_stmt_execute($stmt2); 
     $status='test'; //get return value from function    
     mysqli_stmt_bind_param($stmt2, 'ss', $status, $col1); 
    } 
    mysqli_stmt_close($stmt2); 
} 


    mysqli_stmt_close($stmt); 
} 


mysqli_close($link); 

Répondre

0

Vous préparez une deuxième déclaration dans une boucle qui est en train de récupérer des données à partir de la première déclaration. Vous pourriez être en mesure de résoudre ce problème en créant deux connexions. Voir ce post:

http://osdir.com/ml/php.zend.framework.db/2007-07/msg00027.html

Vous pourriez également être en mesure de lire toutes les lignes de la première requête dans un tableau, puis une boucle sur le tableau, en plaçant votre deuxième requête dans cette boucle.

Il peut être être possible (et je n'ai pas essayé cela), pour préparer la deuxième déclaration à l'avance. Lorsque vous êtes dans la boucle, liez les variables et exécutez-le. Quelque chose comme ça (complètement non testé!):

$stmt1 = mysqli_prepare($link, "SELECT field_1, field_2 FROM table_data"); 
$stmt2= mysqli_prepare($link, "update table_data set field_3=? where field_1=?"); 

if ($stmt1 && $stmt2) { 
    mysqli_stmt_execute($stmt1);  
    mysqli_stmt_bind_result($stmt1, $col1, $col2); 

    while (mysqli_stmt_fetch($stmt)) { 
     $status='test'; //get return value from function 
     mysqli_stmt_bind_param($stmt2, 'ss', $status, $col1); 
     mysqli_stmt_execute($stmt2); 
    } 

    mysqli_stmt_close($stmt2); 
    mysqli_stmt_close($stmt1); 
} 
Questions connexes