2012-01-03 10 views
0

私は自分のコードを調べています。 1つの変数に値を格納するだけの場合は、これを行う必要があります。PHP/MySQLi - 変数に1行とストアの値を取得する方法は?

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; 
} 

これを行うには、簡単な方法が必要です。私はちょうどこれのようにすることができます:

それは長くてもいいですが、それは素敵で短くすることができます。

誰でも私がそれを達成するために必要なことを知っていますか?

答えて

2

まず

あなたがreturnを使用した場合の文$stmt->close();は実行されませんされます。

セカンド

は2 VARSを取り除く、あなただけの1を必要としています。意味の意味に惑わされないでください。

サード

簡単な再編成は、これを次のようになります。あなたの助けを

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文全体を含めるように答えを編集しました。 "次の"ケースが他の2つのクエリと異なるクエリを参照してください、私はまだあなたの答えの仕事をすることはできますか? – Drew

+0

あなたが右にスクロールすると、次のクエリは実際には、別のオプションよりもずっと長くなります。実際には、単一の値を返すだけで済むたくさんの他のクエリでこれを必要とするかもしれません。何にも適用できるより普遍的な解決策がありますか? – Drew

+0

@Drewこのケースでは、すべての "ケース"で、クエリ、prepare文、およびバインドを入れなければなりません。他の命令はスイッチの後に行くことができます。 –

関連する問題