2012-09-01 21 views
-1

您好,我寫了下面的函數從我的數據庫中獲取的值:獲取值

function getSlCreatedate($sid) { 
    $query1 = "SELECT Sub_type FROM `Sub` where `Sub_id` = $sid"; 
    $queryresult1 = mysql_query($query1); 
    $row1 = mysql_fetch_assoc($queryresult1); 
    $type1 = $row1['created_ts']; 
    if($type1 == 'SL') { 
    $query2 = "SELECT Sub_attr_value FROM `Sub_attr_list` WHERE `Sub_attr_type_id` = 20 AND `Sub_id` = $sid"; 
    $queryresult2 = mysql_query($query2); 
    $row2 = mysql_fetch_assoc($queryresult2); 
    $type2 = $row2['Sub_attr_value']; 
    if($type2 == " "){ 
    $query3 = "SELECT Created_ts FROM `Sub` WHERE `Sub_id`= $sid"; 
    $queryresult3 = mysql_query($query3); 
    $row3 = mysql_fetch_assoc($queryresult3); 
    return $row3['Created_ts']; 
    } 
    else { 
    return $type2['Sub_attr_value']; 
    } 
    } 
    else 
    return 0; 
} 

有什麼條件,我需要先檢查Sub_type在數據庫中對於給定的「SID」值,如果返回「SL」作爲結果,那麼我需要從「Sub_attr_list」表中獲取「Sub_attr_value」,如果此值返回空行或值NULL,那麼我必須將該sid的「Created_ts」值返回給頁,這裏所有的查詢工作正常,當我執行我的PHP MyAdmin分開,任何人都可以指導我完成這一點,我無法從這裏獲得值到頁面。

在我的頁面的函數調用如下:

$sldate = db_func::getSlCreatedate($sub_list[$i]['Sub_id']); 

幸好它沒有顯示任何錯誤,也沒有表現出預期的結果。

+1

不要通過將字符串混合在一起來構建SQL。不要使用'mysql_query',在[該函數的手冊頁](http://php.net/mysql_query)上有一個大紅色警告的原因。 – Quentin

+0

看起來像你可以將所有3合併到一個查詢中,只需一次連接 – 2012-09-01 10:56:39

+0

如果要保持原樣,那麼您的代碼很容易被注入,請閱讀有關SQL注入的更多信息:http://stackoverflow.com/問題/ 11939226/sql-injections-and-adodb-library-general-php-website-security-with-examples –

回答

1
function getSLCreatedDate($sid) { 

    $query = "SELECT s.created_ts, sa.Sub_attr_value FROM Sub s 
       LEFT JOIN Sub_attr_list sa ON sa.Sub_id=s.Sub_id AND sa.Sub_attr_type_id='20' 
       WHERE s.Sub_id='" . mysql_real_escape_string($sid) . "'" 
    $sql = mysql_query($query); 

    $row = mysql_fetch_array($sql); 

    if($row['created_ts'] == 'SL') 
     return isset($row['Sub_attr_value']) ? $row['Sub_attr_value'] : $row['created_ts']; 

    return 0; 
}