2012-01-03 61 views
0

我正在通過我的代碼,我正在運行這麼多的查詢,它會變長。如果我只想用一個值存儲單個變量,我必須這樣做:PHP/MySQLi - 如何獲取一行的值並存儲在變量中?

switch($type) { 
    case "next": 
    if ($stmt = $mysqli->prepare("SELECT sort_order FROM user_slides WHERE user_id = ? AND sort_order > ? ORDER BY sort_order LIMIT 1")) { 
     $stmt->bind_param('is', $user_id, $sortId); 
     $stmt->execute(); 
     $stmt->bind_result($next_sort_id); 
     $stmt->store_result(); 
     $stmt->fetch(); 

     return $next_sort_id; 

     $stmt->close(); 
    } 
    break; 

    case "first": 
    if ($stmt = $mysqli->prepare("SELECT MIN(sort_order) as max_slides FROM user_slides WHERE user_id = ?")) { 
     $stmt->bind_param('i', $user_id); 
     $stmt->execute(); 
     $stmt->bind_result($first_sort_id); 
     $stmt->store_result(); 
     $stmt->fetch(); 

     return $first_sort_id; 

     $stmt->close(); 
    } 
    break; 

    case "last": 
    if ($stmt = $mysqli->prepare("SELECT MAX(sort_order) as max_slides FROM user_slides WHERE user_id = ?")) { 
     $stmt->bind_param('i', $user_id); 
     $stmt->execute(); 
     $stmt->bind_result($last_sort_id); 
     $stmt->store_result(); 
     $stmt->fetch(); 

     return $last_sort_id; 

     $stmt->close(); 
    } 
    break; 
} 

必須有一種更簡單的方法來完成此操作。在那裏我可以這樣做:

$first_sort_id = QUERY HERE 
$last_sort_id = QUERY HERE 

所以它不必這麼長,它可以很好,很短。

有誰知道我需要做什麼來完成?

回答

2

首先

如果使用return聲明$stmt->close();將永遠不會被執行。

擺脫2個瓦爾的,你只需要一個。不要被語義所迷惑。

一個簡單的重組可能是這樣的:

switch($type) 
{ 
    case "next": 
     $Query = "SELECT sort_order"; 
    break; 
    case "first": 
     $Query = "SELECT MIN(sort_order)"; 
    break; 
    case "last": 
     $Query = "SELECT MAX(sort_order)"; 
    break; 
} 

if ($stmt = $mysqli->prepare("$Query as max_slides FROM user_slides WHERE user_id = ?")) 
{ 
     $stmt->bind_param('i', $user_id); 
     $stmt->execute(); 
     $stmt->bind_result($value); 
     $stmt->store_result(); 
     $stmt->fetch(); 
     $stmt->close(); 

     return $value; 
} 
else 
    return NULL; 
+0

感謝您的幫助!我編輯了我的答案,以包含整個switch語句。看到「下一個」案件與另外兩個案件有不同的查詢,我仍然可以讓你的答案工作嗎? – Drew 2012-01-03 03:30:32

+0

如果您向右滾動,我的下一個查詢實際上比其他查詢具有更長的時間。實際上,我可能需要這個來做很多其他的查詢,我只需要返回一個值。有沒有更適用於任何事情的更通用的解決方案? – Drew 2012-01-03 03:41:25

+0

@Drew好吧,在這種情況下,在每一個「案件」你必須把查詢,準備陳述和綁定。其他指令可以在切換後進行。 – 2012-01-03 03:43:29

相關問題