iT邦幫忙

0

general error 2050

  • 分享至 

  • xImage

各位大大好
小弟在用 pdo 時遇到問題
就是當我用連續兩個同名的 pdo query 後的物件時(像在loop中)
他會無法跑第二個
然後報 "2050 的錯誤"
網路上找解法是取不同名稱或把原本的名稱設成空值
可是這些方法我試過都行不通
請問還有什麼方法嗎?

補上程式碼

public function getSale($search_time, $option = array())
{
        $time_start = $search_time['search_year'].$search_time['search_month_start'];
        $time_end = $search_time['search_year'].$search_time['search_month_end'];

        $data_array = array();
        $show_sql = "
        select distinct isdept from test where yyyymm between '$time_start'           and '$time_end' order by isdept";
        $show_query = $this->link->query($show_sql);
        $shows = $show_query->fetchAll(PDO::FETCH_ASSOC);

        foreach ($shows as $show) {
            $sale_sql = "
            select isdept, dptnam, round(sum(depositqty)) as depositqty, round(sum(depositamtx)) as depositamtx, sum(qty) as qty, round(sum(amtx)) as amtx, round(sum(amtx-cost)) as profit
            from test m inner join invtest i using(isdept)
            where yyyymm between '$time_start' and '$time_end' and isdept = '".$show['isdept']."' and i.iclas='0' and i.isclas='0'
            GROUP BY isdept 
            order by isdept";
            $sale_query = $this->link->query($sale_sql);

            $data_array[$show['isdept']][$search_time['search_year']] = $sale_query->fetchAll(PDO::FETCH_ASSOC);
         }
return json_encode($data_array);
}

P.S: PHP使用 5.1版 原因可能會是版本太舊
但無法升級的情況下不知道有沒有什麼方式解決

---更新(問題已解決)
不使用 fetch 改採用 prepare + execute
迴圈尾端加上

$sale_query->closeCursor();
$sale_query = NULL;
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-10-08 09:19:01

$sale_query = $this->link->query($sale_sql);

$data_array[$show_sdept][$search_time['search_year']-$i] = $sale_query->fetchAll(PDO::FETCH_ASSOC);

加一列 unset 試看看

$sale_query = $this->link->query($sale_sql);

$data_array[$show_sdept][$search_time['search_year']-$i] = $sale_query->fetchAll(PDO::FETCH_ASSOC);

unset($sale_query);

參考資料來源

順帶一提
比較好的做法應該是「把兩段 SQL 合成一段」
就不會碰到這個問題了

看更多先前的回應...收起先前的回應...
st474ddr iT邦新手 2 級 ‧ 2021-10-08 09:30:20 檢舉

大大好
我已經補上 code了

st474ddr iT邦新手 2 級 ‧ 2021-10-08 11:34:22 檢舉

感謝大大回覆
先解釋我為什麼要這樣做
其實原 code 外部還有一個迴圈來跑年度
所以才有大大看到的 $i 變數
但為了畫面縮減我把它拿掉了
就只留一個迴圈

兩個SQL功能
第一個: 找出首年度所有的子部門

第二個: 找出所有該子部門當年度業績(總子部門數以首年度為主)

加一列 unset 試看看

這其實小弟也試過了
我也嘗試了動態常數命名 ${"sale".$show['isdept']}
$sale_query->closeCursor();
都是一樣的結果QQ

比較好的做法應該是「把兩段 SQL 合成一段」
就不會碰到這個問題了

我想也是
因為他第一次執行是成功的

這可能是舊版 PHP pdo的坑吧QQ

其實原 code 外部還有一個迴圈來跑年度
所以才有大大看到的 $i 變數
但為了畫面縮減我把它拿掉了

問題就是在「因為迴圈而重覆使用的 pdo 物件」
你把它拿掉
還期望得到正確答案嗎?

什麼樣的問題
就會得到什麼樣的答案
/images/emoticon/emoticon10.gif

st474ddr iT邦新手 2 級 ‧ 2021-10-08 12:02:43 檢舉

不好意思大大
問題的確是出在迴圈
所以我留了內部迴圈
因為光我拿掉外部迴圈跑(如我發問的)的結果就會有如此狀況了
讓您誤解不好意思

我要發表回答

立即登入回答