2012-12-03 148 views
1

嗨,你好我的MySQL代碼轉換爲MySQLi,因爲它更安全,但AFAIK MySQLi本身並不是更安全。mysql到mysqli轉換

我用轉換器在選擇回答這個話題: Updating from MYSQL to MYSQLI

和代碼工作,但現在我不知道究竟該怎麼做,我知道我必須準備querys但究竟在何處以及如何準備我不知道...

例如,如果我有一個插入查詢5個或更多的PHP變量可以嗎?我該怎麼做?我發現的所有例子都是一個變量......並且在查詢之前立即準備好了嗎?

我難過嗎?我很抱歉,如果這是非常基本的東西,但我完全noob與此,我想要的是一些指導方針...

+1

不要升級爲「安全」。這一切都歸結爲程序員的能力和知識。使用mysqli或pdo不會立即使任何「更安全」。如果你知道你在做什麼,mysql可以非常安全。相反,升級到pdo或mysqli是因爲mysql已被棄用。 –

+0

...因爲mysql強制你編寫代碼時沒有一些方便的基本功能,比如預準備語句。 –

+1

不要敲OP;他正在問完全正確的問題,並希望做正確的事情。讓我們鼓勵。在任何情況下,實際上在舊的mysql庫中都存在一些安全性問題,即使您不打算使用準備好的查詢等新功能,也可以避免這種情況。 – SDC

回答

4

下面是一個具有多個參數的INSERT查詢的示例。

/* create a prepared statement */ 
if ($stmt = $mysqli->prepare("INSERT INTO mytable (field1, field2, field3) VALUES(?, ?, ?)")) { 

    /* bind parameters for markers */ 
    $stmt->bind_param("sss", $field1, $field2, $field3); 

    /* execute query */ 
    $stmt->execute(); 

    /* close statement */ 
    $stmt->close(); 
} 

正如你可以看到$field1$field2,並且$field3將被綁定爲字符串(注意三個s),將取代在查詢中?

Bind param types

I - 對應的變量的類型爲整數
d - 對應的變量的類型爲雙
秒 - 對應的變量的類型爲字符串
b - 對應變量是一個blob和將被髮送in packets

+0

,如果它不是字符串?一些整數和浮點數是我的嗎? –

+1

更新了與其他類型的答案 – MrCode

+0

謝謝:)所以在其他使其他任何查詢就像那樣,我替換如右例中的變量? stmt需要每次都關閉嗎? –