update 문 질문입니다. 도저히 이해가 안되서 ㅠ
본문
<?
include_once('./_common.php');
set_time_limit(0);
error_reporting(E_ALL);
ini_set('display_errors', 1);
$tree_data = 0;
function findUser($wr_id)
{
global $model;
global $tree_data;
$childs = [];
foreach ($model as $key => $val) {
if ($val['wr_6'] == $wr_id) {
$tree_data++;
$childs[] = $val;
}
}
foreach ($childs as $key => $val) {
if ($val['wr_id'] == 1) {
$result[] = $val;
}
findUser($val['wr_id']);
}
}
$sql = "SELECT a.wr_id , a.mb_id , a.wr_6 , a.wr_2 , a.wr_9 , a.wr_10 FROM g5_write_plan_a a";
$my_result = sql_query($sql);
$model = array();
$start = microtime(true);
for ($i = 0; $row = sql_fetch_array($my_result); $i++) {
$model[] = $row;
}
foreach ($model as $key => $val) {
if ($key <= 3) {
$tree_data = 0;
//echo $val['wr_id'] . "<br>";
findUser($val['wr_id']);
$level = '0';
if ($tree_data < '2') {
$level = '0';
} else
if ($tree_data >= '2' and $tree_data <= '5') {
$level = '1';
} else
if ($tree_data >= '6' and $tree_data <= '13') {
$level = '2';
} else
if ($tree_data >= '14' and $tree_data <= '29') {
$level = '3';
} else
if ($tree_data >= '30' and $tree_data <= '61') {
$level = '4';
} else
if ($tree_data >= '62' and $tree_data <= '125') {
$level = '5';
} else
if ($tree_data >= '126' and $tree_data <= '253') {
$level = '6';
} else
if ($tree_data >= '254' and $tree_data <= '509') {
$level = '7';
} else
if ($tree_data >= '510' and $tree_data <= '1021') {
$level = '8';
} else
if ($tree_data >= '1022' and $tree_data <= '2045') {
$level = '9';
} else
if ($tree_data >= '2046' and $tree_data <= '4093') {
$level = '10';
} else
if ($tree_data >= '4094' and $tree_data <= '8189') {
$level = '11';
} else
if ($tree_data >= '8190' and $tree_data <= '16381') {
$level = '12';
} else
if ($tree_data >= '16382' and $tree_data <= '32765') {
$level = '13';
} else
if ($tree_data >= '32766' and $tree_data <= '65533') {
$level = '14';
} else
if ($tree_data >= '65534' and $tree_data <= '131069') {
$level = '15';
} else
if ($tree_data >= '131070' and $tree_data <= '262141') {
$level = '16';
} else
if ($tree_data >= '262142' and $tree_data <= '524285') {
$level = '17';
} else
if ($tree_data >= '524286' and $tree_data <= '1048573') {
$level = '18';
} else
if ($tree_data >= '1048574' and $tree_data <= '2097149') {
$level = '19';
} else
if ($tree_data >= '2097150' and $tree_data <= '4194301') {
$level = '20';
}
$sql2 = " update g5_write_plan_a set wr_9 = '$level' where wr_id = '$val[wr_id]' ";
sql_query($sql2);
echo $val['wr_id'] . "<br>";
echo "tree_data:".$tree_data."<br>";
echo "level:".$level."<br>";
}
}
$end = microtime(true);
$time = $end - $start;
echo number_format($time, 8) . "<br>";
상단 전체 소스입니다.
보시 if ($key <= 3) { 문으로 인해
wr_id 값을 제한적으로 뽑아냅니다.
echo $val['wr_id'] . "<br>";
echo "tree_data:".$tree_data."<br>";
echo "level:".$level."<br>";
이렇게 나오게 했더니
아래 이미지처럼 결과값 정상으로 잘 나옵니다.
$sql2 = " update g5_write_plan_a set wr_9 = '$level' where wr_id = '$val[wr_id]' ";
sql_query($sql2);
업데이트를 쿼리 걸어졌는데 정상으로 안들어갑니다.
여기서 머리가 쥐가 나네요!
제가 테스트로
$level = '15';
$val['wr_id'] = '1';
$sql2 = " update g5_write_plan_a set wr_9 = '$level' where wr_id = '$val[wr_id]' ";
sql_query($sql2);
이렇게 날려봤더니 정상으로 디비에 들어갑니다.
위에 소스 보시면 알겠지만 에러 표기 걸어놨는데 에러도 안나옵니다.
도대체 왜 그럴가요?
도저히 이해가 안되는 부분입니다.
소스문제도 없고
디비문제도 없고
결과값 정상으로 나오고!
근데 왜 디비에 안들어갈가요? ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
!-->!-->!-->!-->
답변 9
sql_query($sql2 , true); <== 이렇게 하면 에러 있을 경우 에러코드 나옵니다
==================================
ajax로 실행하기
위 소스에서 수정
$start_page = $next_page - 3000; //추가
$sql = "SELECT a.wr_id , a.mb_id ~ FROM g5_write_plan_a a limit wr_id >$start_page and wr_id <= $next_page "; //수정
마지막 echo number_format($time, 8) . "<br>"; <==삭제 후 다음 코드 추가
if(isset($model[0]) && $mode[0]) die("OK"); else die("END");
start.php - jquery 사용
================
<div id='status'></div>
<script>
next_id = 3000; //wr_id 3000 개씩 update
function update_start(){
$.post("위소스화일", "next_id="+next_id, function(req){
if(req =='OK'){$('#status').append('wr_id='+next_id+' / '); next_id+=3000; update_start();}
else if(req == 'END') alert('완료');
else alert(req)
});
}
$val[wr_id] ==> $val['wr_id']
{$val[wr_id]} 식으로 쿼리문안에 변수들에게 {} 앞뒤로 붙여보세요
그리고 echo로 쿼리문이 정확하게 어떻게 나오는지 확인해보세요
해당도 안되시면 일단 echo로 어떻게 나오는지 확인하시고 거기서 에러가 있나 없나 한번 살펴보셔야 할거 같습니다.
$sql2 = " update g5_write_plan_a set wr_9 = '$level' where wr_id = '$val[wr_id]' ";
sql_query($sql2);
echo $sql2; 해보세요, 정상적으로 구문이 만들어지는지
<?
include_once('./_common.php');
set_time_limit(0);
error_reporting(E_ALL);
ini_set('display_errors', 1);
$tree_data = 0;
function findUser($wr_id)
{
global $model;
global $tree_data;
$childs = [];
foreach ($model as $key => $val) {
if ($val['wr_6'] == $wr_id) {
$tree_data++;
$childs[] = $val;
}
}
foreach ($childs as $key => $val) {
if ($val['wr_id'] == 1) {
$result[] = $val;
}
findUser($val['wr_id']);
}
}
$sql = "SELECT a.wr_id , a.mb_id , a.wr_6 , a.wr_2 , a.wr_9 , a.wr_10 FROM g5_write_plan_a a";
$my_result = sql_query($sql);
$model = array();
$start = microtime(true);
for ($i = 0; $row = sql_fetch_array($my_result); $i++) {
$model[] = $row;
}
$kkk = 0;
foreach ($model as $key => $val) {
if ($key <= 3) {
$tree_data = 0;
//echo $val['wr_id'] . "<br>";
findUser($val['wr_id']);
$level = '0';
if ($tree_data < '2') {
$level = '0';
} else
if ($tree_data >= '2' and $tree_data <= '5') {
$level = '1';
} else
if ($tree_data >= '6' and $tree_data <= '13') {
$level = '2';
} else
if ($tree_data >= '14' and $tree_data <= '29') {
$level = '3';
} else
if ($tree_data >= '30' and $tree_data <= '61') {
$level = '4';
} else
if ($tree_data >= '62' and $tree_data <= '125') {
$level = '5';
} else
if ($tree_data >= '126' and $tree_data <= '253') {
$level = '6';
} else
if ($tree_data >= '254' and $tree_data <= '509') {
$level = '7';
} else
if ($tree_data >= '510' and $tree_data <= '1021') {
$level = '8';
} else
if ($tree_data >= '1022' and $tree_data <= '2045') {
$level = '9';
} else
if ($tree_data >= '2046' and $tree_data <= '4093') {
$level = '10';
} else
if ($tree_data >= '4094' and $tree_data <= '8189') {
$level = '11';
} else
if ($tree_data >= '8190' and $tree_data <= '16381') {
$level = '12';
} else
if ($tree_data >= '16382' and $tree_data <= '32765') {
$level = '13';
} else
if ($tree_data >= '32766' and $tree_data <= '65533') {
$level = '14';
} else
if ($tree_data >= '65534' and $tree_data <= '131069') {
$level = '15';
} else
if ($tree_data >= '131070' and $tree_data <= '262141') {
$level = '16';
} else
if ($tree_data >= '262142' and $tree_data <= '524285') {
$level = '17';
} else
if ($tree_data >= '524286' and $tree_data <= '1048573') {
$level = '18';
} else
if ($tree_data >= '1048574' and $tree_data <= '2097149') {
$level = '19';
} else
if ($tree_data >= '2097150' and $tree_data <= '4194301') {
$level = '20';
}
if( $val['wr_id'] != '' ){
$sql2 = " update g5_write_plan_a set wr_9 = '$level' where wr_id = '$val[wr_id]' ";
sql_query($sql2);
}else{
$kkk++;
}
//echo $val['wr_id'] . "<br>";
//echo "tree_data:".$tree_data."<br>";
//echo "level:".$level."<br>";
}
}
echo "val is null ".$kkk."<br>";
$end = microtime(true);
$time = $end - $start;
echo number_format($time, 8) . "<br>";
계속 문제있다 하시니...
$val['wr_id'] 부터 체크해보죠.
$kkk 출력이 0이어야합니다.
!-->
이상은 없는것 같은데
g5_write_plan_a
테이블에 해당되는 wr_id 값이 없는 것 아닌가요
아래 구문 넣어 찍어보세요.
$sql3 = sql_fetch(" select * from g5_write_plan_a where wr_id = '$val[wr_id]' "
);
if($sql3) {
echo "있다"."<br>";
} else {
echo "없다"."<br>";
}
$sql2 = " update g5_write_plan_a set wr_9 = '$level' where wr_id = '$val[wr_id]' ";
sql_query($sql2);
요렇게 한번 해 보세요
$sql = "SELECT wr_id, mb_id, wr_6, wr_2, wr_9, wr_10 FROM g5_write_plan_a order by wr_id";
$my_result = sql_query($sql);
for ($key = 0; $val = sql_fetch_array($my_result); $key++) {
if ($key <= 3) {
그리고
if ($tree_data < '2') { // if 문 숫자의 따옴표도 모두 지우세요.