2010-07-07 1 views
0

Что делать, если я хочу обновлять данные с помощью подготовленного stmt каждого цикла запросов, но почему это не удается. ГЗС ошибки «Все данные должны быть выбраны перед тем, как новое заявлением подготовить происходит»php подготовил stmt problem- обновить данные в каждом цикле результатов

$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); 

ответ

0

Вы готовите второе заявление в течение цикла, который извлечение данных из первого оператора. Возможно, вы сможете решить это, создав два соединения. Смотрите этот пост:

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

Вы могли бы также быть в состоянии прочитать все строки из первого запроса в массив, а затем цикл по массиву, размещения второго запроса в этом цикле.

Это может быть может быть возможным (и я не пробовал это), чтобы подготовить второе заявление заранее. Когда в цикле привяжите переменные к нему и выполните его. Что-то вроде этого (полностью непроверено!):

$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); 
} 
Смежные вопросы