2013-12-09 38 views
0

我試圖將我編寫的代碼轉換爲使用php函數mysqli_stmt_bind_param()而不是在預先寫入的語句中替換標記,我認爲這不是一個好的練習。功能
所以在這裏我有今天:將NULL值綁定到mysqli_stmt_bind_param()

$idTag1="###"; 
$requestReplaceArray = array("%PRODUCT_ID%","%PLATFORM_ID%","%STATUS_ID%","%DATE%","%COMMENT%",$idTag1); 
$updateRequest="UPDATE REQUEST 
       SET 
        id_product = %PRODUCT_ID%, 
        id_platform = %PLATFORM_ID%, 
        id_status = %STATUS_ID%, 
        last_modifier = '".$_SERVER['PHP_AUTH_USER']."', 
        last_modification_date='%DATE%', 
        last_comment = '%COMMENT%' 
       WHERE id =".$idTag1; 


function updateRequest($id, $productID, $platformID, $statusID, $date, $comment){ 
    global $requestReplaceArray, $updateRequest; 
    escapeArguments($id, $productID, $platformID, $statusID, $date,$comment); 
    /*if number value is empty replace by 'null'*/ 
    $productID=replaceEmptyValueByNull($productID); 
    $platformID=replaceEmptyValueByNull($platformID); 
    $statusID=replaceEmptyValueByNull($statusID); 

    $dbConnection = getDbConnection(); 
    $replacement = array($productID, $platformID, $statusID,$date ,$comment, $id); 
    $updateRequest = str_replace($requestReplaceArray, $replacement, $updateRequest); 


    if(! $result = mysqli_query($dbConnection, $updateRequest)) { 
     mysqli_free_result($result); 
     $dbConnection->close(); 
     return "Error MyU02, can't update the request #".$id; 
    }else{ 
     mysqli_free_result($result); 
     $dbConnection->close(); 
     return $id; 
    } 
} 

此代碼是不完美的,但它的工作原理除了當一個$dateNULL

我的目標是到現在使用synthax:

$requestReplaceString = "iiissi"; 
$updateRequest="UPDATE REQUEST 
      SET 
       id_product = ?, 
       id_platform = ?, 
       id_status = ?, 
       last_modifier = '".$_SERVER['PHP_AUTH_USER']."', 
       last_modification_date=?, 
       last_comment = ? 
      WHERE id =?"; 


function updateRequest($id, $productID, $platformID, $statusID, $date, $comment){ 
    global $requestReplaceString, $updateRequest; 
    $dbConnection = getDbConnection(); 

    $stmt = mysqli_prepare($dbConnection, $updateRequest); 
    mysqli_stmt_bind_param($stmt, $requestReplaceString, $productID, $platformID, $statusID,$date ,$comment, $id); 


    if(mysqli_stmt_execute($stmt)) { 
     mysqli_stmt_close($stmt); 
     $dbConnection->close(); 
     return $id; 
    }else{ 
     mysqli_stmt_close($stmt); 
     $dbConnection->close(); 
     return "Error MyU02, can't update the request #".$id; 
    } 
} 

我這裏主要的問題是一些值設置爲null,因爲試圖綁定一個PHP NULL是不工作的。所以我的問題是如何將mysqli與NULL綁定在一起?

編輯:它確實有效,我的錯誤來自我的錯誤代碼,代碼現在已更正。

+1

爲什麼不綁定$ _SERVER ['PHP_AUTH_USER']? –

+0

的確如此......這是相關的。 – Kiwy

回答

1

只要綁定它。它完美的作品。任何空值將作爲mysql的NULL發送到服務器。

另請注意,您的代碼存在一個致命問題:您正在連接到每個查詢的數據庫。這會殺死你的服務器。

+0

我討厭php,而且我不是一個真正的PHP開發者,我真的很想知道如何維護一個連接,並在會話結束時關閉它,但這是我確定不知道該怎麼做的。如果您對此有任何暗示,我會很樂意。 – Kiwy

+0

經過更精確的調查後,你往往是對的。而我的測試不在哪裏。 Thnak你 – Kiwy