2012-07-11 4 views
0

다음 스크립트를 사용하여 레코드 수를 삽입하고 싶습니다. 그러나 첫 번째 것만 삽입됩니다. 그 후에는 오류를 표시하지 않고 멈 춥니 다. 준비된 성명서 실행에 어떤 문제가 있습니까?for 루프에서 준비된 insert 문은 첫 번째 반복에서만 작동합니다 .. (PHP)

//$dbc = database connection //shortan here 
// $mid[] = {1,2,3,4}; //sortened here. 

$q5 = "INSERT INTO user_book_trn(user_id, member_id, book_id, date_read, lang_id) VALUES (?, ?, ?, now(), ?)"; 

$s5 = mysqli_prepare($dbc, $q5); 
//Bind the variables: 
mysqli_stmt_bind_param($s5, 'iiii', $user_id, $member_id, $book_id, $lang_id); 

foreach($mid as $mk => $mv) { //check for each selected check box value from member list: 

    $q2 = "SELECT user_id, member_id, book_id FROM user_book_trn WHERE user_id = {$_SESSION['myuser']['userid']} and member_id = {$mv} and book_id= {$w}"; 

    $r3 = mysqli_query($dbc, $q2); 

    if (mysqli_num_rows($r3) == 0) { //title is available for this user. 

     //Assign the values to variables: 
     $user_id = (int)$_SESSION['myuser']['userid']; 
     $member_id = (int)$mv; 
     $book_id = (int)$w; 
     $lang_id = (int)$_SESSION['lid']; 

     //just to check each iteration gets new values: 
     echo "user_id : $user_id \n"; 
     echo "member_id : $member_id \n"; 
     echo "book_id : $book_id \n"; 

     //Execute the query: 
     mysqli_stmt_execute($s5); 
     if (mysqli_affected_rows($dbc) == 1) { 
      //this runs ok just for the first iteration.. Why? 

      echo "<p><b> The book $t is added. </b></p>"; 
      $_SESSION['bookid'] = $book_id; 
     } 
    } 
} 
+1

'위해서 var_dump ($ 중간)' –

+0

이유를이 위해서 var_dump ($ 중간) ? 각 반복에 대해 member_id를 인쇄하여 새로운 가치를 얻고 있는지 확인합니다. –

+0

'echo "user_id : $ user_id'를 두 번째로 실행합니까 아니면 그 전에 죽는가? 3 개의 시작 팔머'{', 단 하나의'}'만 남았습니다. 다른 2 개가 부분 외부에 있으면 만약 당신이 2 개의'''를 추가하지 않았다면 복사해서 어떤 차이가 있는지 확인하십시오. –

답변

0

정확한 세부 정보는 모르지만 준비된 문은 실행 후 결과 집합에 바인딩됩니다. 당신은 추가 첫번째

mysqli_stmt_reset($s); 

http://php.net/mysqli-stmt.reset

당신이 유용 변수 이름을 사용하는 것이 좋습니다 다시 설정해야합니다. 그리고 당신은 당신이 어떤 오류가 볼 수 없습니다 언급하기 때문에 :

mysqli_stmt_error_list($s5); 

http://php.net/mysqli-stmt.error-list

http://php.net/mysqli-stmt.errno

http://php.net/mysqli-stmt.error

+0

mysqli_stmt_reset $ _SESSION [ 'bookid'] = $ bookid 다음에 ($ s5)가 올 수도 있지만 성공하지 못했습니다. –

+0

mysqli_affected_rows()가'0'이거나'-1' (오류, 매뉴얼 참조)일까요? 언급 된 다른 기능/방법? – KingCrunch

+0

Wonderfulllll ...... 감사합니다. 그게 문제였습니다. 감사합니다 +1 –

관련 문제