下のPHPのwhile文ループ内のif文を1回通過するとそれより先のループで配列の追加処理が行われなくなってしまいます、ただelse文にすべての処理が通ると追加処理が全てのループで行われるようなのですがなぜそうなってしまうのかの理由がわからないので教えてほしいです。詳細説明はPHPコードの下にあります。
PHP
1<?php 2//途中から 3mysql_connect($db_host, $db_username, $db_password, $db_name); 4mysql_select_db($db_name) or die (mysql_error()); 5mysql_set_charset('utf8'); 6 7 8$sql = "SELECT id,state,mail_from_adress,mail_to,mail_subject,mail_text,mail_answer,report_result,mail_URL FROM `attack_mail_db`"; 9$query = mysql_query($sql) or die(mysql_error()); 10 11while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { 12 if($row["state"] == 1) { 13 $report_check_num = 0; 14 $report_check_correct_count = 0; 15 16 $i = 1; 17 while ($row["report_result"][$i] != "]") { 18 $report_check_num++; 19 if ($row['report_result'][$i] == 0) { 20 $report_check_correct_count++; 21 } 22 $i++; 23 } 24 $report_check_num = $report_check_num - ($report_check_num - 1) / 2; 25 26 $report_check_correct_rate = bcdiv($report_check_num, $report_check_correct_count, 2); 27 $mail_id = $row["id"]; 28 $sql = "UPDATE `attack_mail_db` SET `correctRate` = '$report_check_correct_rate' WHERE `attack_mail_db`.`id` = '$mail_id'"; 29 $query = mysql_query($sql) or die(mysql_error()); 30 } 31 else { 32 $report_check_correct_rate = 0; 33 } 34 35 $mailList [] = array( 36 'id' => $row["id"], 37 'state' => $row["state"], 38 'cometime' => "", 39 'mailSubject' => "先日相談したメニューについて", 40 'mailFrom' => "飯田太郎", 41 'mailTo' => "(株)○○食品", 42 'mailName' => "masaki@gmail.com", 43 'correctRate' => $report_check_correct_rate,//count($row["report_result"]),//$report_check_num, 44 ); 45 46} 47 48 $result = json_encode($mailList, JSON_UNESCAPED_UNICODE); 49 printf($result); 50?>
###説明の詳細
SQL文はきちんと実行できており、エラーは特に無いのですが、SELECT文でDBから取得したデータを配列$Listに格納する際に、
なぜか、while文内の
PHP
1if($row["state"] == 1){ 2}
内の処理を通った場合、それより先のループで配列$Listにデータが格納されなくなってしまいます。(下の処理が実行されない)
また、$List内のデータが原因なのではないかと思ったのですがそうでもない様でした。
ただ、else文に全てwhile文の各ループが通った時は全ての新しいデータが配列$Listに格納されました
PHP
1$List [] = array( 2 'Name' => "aaaaaaaaaa", 3 );
###(追記)原因を探っていると・・・
PHP
1if($row["state"] == 1){ 2}
内のUPDATEをコメントアウトすると全てのループでデータが格納されたのでUPDATEがおかしいことがわかりました
おそらく、UPDATEをPHP内で複数回呼ぶとだめっぽいんですけどその予想は正しいでしょうか?
(
回答4件
あなたの回答
tips
プレビュー