2016-12-05 60 views
1

錯誤沒有進一步的描述,上面的錯誤是我得到的唯一的東西。我也設法弄錯了錯誤,並且它是我嘗試抓取所有結果的那一行。執行巨大的查詢返回SQLSTATE [HY000]:一般錯誤

$id = (int) base64_decode($id); 
try { 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $conn->beginTransaction(); 
    $sql = "SET @i:=0; SELECT result.* FROM (SELECT @x:[email protected]+1 AS position, temp.* FROM (SELECT u.id, u.fbname, MAX(c.likeit + c.loveit + c.cute + c.aw) AS total, c.likeit, c.loveit, c.cute, c.aw FROM currentphoto AS c LEFT JOIN users AS u ON u.id = c.id GROUP BY u.id ORDER BY total DESC) temp) result WHERE id = :id"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindParam(':id', $id, PDO::PARAM_INT); 
    $stmt->execute(); 
    $rows = $stmt->fetchAll(PDO::FETCH_OBJ); 
    $conn->commit(); 
} catch (Exception $e) { 
    $conn->rollBack(); 
    echo $e->getMessage(); 
} 
if ($rows != null) { 
    return json_encode(base64_encode($rows)); 
} else return null; 

我剛剛讀過的地方是,在PDO中使用mysql變量可能需要在單獨的查詢中使用聲明。是對的嗎?如果是這樣,我該怎麼做?我是否執行第一個語句和變量之後的第二個語句?

如果那不正確,那麼問題是什麼?謝謝你們

+0

可以UB更具體的,粘貼錯誤,如果你西港島線l或截圖。但最有可能與您的提取查詢 –

回答

1

你面臨的錯誤可能是由於在單個查詢中使用多個語句造成的。

你這裏有兩種選擇:

  • 他們分成1條語句/查詢,並隨後執行它們(在你的情況下,兩個查詢)
  • 使用$conn->setAttribute(\PDO::ATTR_EMULATE_PREPARES, 1);允許在單個查詢
  • 多個語句

這個答案解釋ATTR_EMULATE_PREPARES以及PDO MySQL: Use PDO::ATTR_EMULATE_PREPARES or not?

+0

感謝您的建議。檢查我編輯的帖子。 –

+0

您正在設置'@ i',但使用'@ x'。你能解決這個問題並再次檢查嗎? 'SET @i:= 0; SELECT result。* FROM(SELECT @x ...' –

+0

Thanks mate,非常感謝。正如你所說,我使用了不同查詢中的變量名。 –

相關問題