2012-05-28 109 views
0

我有一個代碼塊,它在mysql表內存儲了一些基本的用戶選擇。將信息分配給表格並創建自動遞增的ID ...如何獲取新創建的ID?

$isACompany = $_POST['isACompany']; 
    $hasDifBilling = $_POST['hasDifBilling']; 
    $stmt = $link->prepare(" 
     INSERT INTO user_info SET 
     id='', 
     isACompany = ?, 
     hasDifBilling = ?' 
    "); 
    if (!$stmt) 
    { 
     $error = "{$link->errno} : {$link->error}"; 
     include "$docRoot/html/main/error.html.php"; 
     exit(); 
    } 
    if (!$stmt->bind_param("ii", $isACompany, $hasDifBilling)) 
    { 
     $error = "{$stmt->errno} : {$stmt->error}"; 
     include "$docRoot/html/main/error.html.php"; 
     exit(); 
    } 
    if (!$stmt->execute()) 
    { 
     $error = "{$stmt->errno} : {$stmt->error}"; 
     include "$docRoot/html/main/error.html.php"; 
     exit(); 
    } 

鑑於該代碼,我將如何獲得在這種情況下新創建的ID?

我還有一個與這段代碼有關的問題,雖然它不是問題的一部分它的自我...由於前兩個變量繪製了這兩個帖子的值,並且看到這些值被硬編碼成該html並通過複選框(「1」或「0」)選擇。在將信息添加到數據庫之前,我還需要對它們進行消毒嗎?

+1

[閱讀'$ stmt-> insert_id'](http://www.php.net/manual/en/mysqli-stmt.insert-id.php) –

+0

@Michael這是一個屬性,而不是一個方法; - ) – DaveRandom

+0

@DaveRandom我應該學會閱讀我自己的文檔鏈接。 –

回答

1

正如Michael正確指出的那樣,可以使用$stmt->insert_id屬性檢索插入的行的ID。

這個問題的更重要的部分是第二部分,這個問題的答案是一個大胖子YES必須逃脫來自用戶輸入的一切!僅僅因爲你將它「硬編碼」到HTML中,並不意味着用戶無法操縱它。有一百萬種方法可以做到這一點 - Javascript injection和「欺騙」HTTP請求,但只有兩種。

必須轉義什麼來自客戶端。總是。故事結局。

+0

非常感謝!所以只需調用該屬性將返回剛剛創建的ID?至於第二部分,我覺得這很有趣:)但是,作爲一個側面問題,在這種情況下,我準備好的語句是否足夠用?這是邁克爾提到這是更好的解決方案? –

相關問題