2013-09-24 57 views
0

我使用MySQLConverterTool轉換我的web應用程序,轉換mysql_ *至* mysqli_問題

我面臨的代碼中獲得大我甚至不明白這意味着什麼

第一個問題?這是非常小的代碼之前,現在我看到這是太大了。

//old code 
$ask_id = mysql_real_escape_string($_POST['ask_id']); 

//after convert 
$ask_id = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $_POST['ask_id']) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); 

其工作正常,但我想知道,如果它的正確的mysqli_*方式或者是有一些問題或錯誤,我需要在網上解決?

我也想知道我怎麼可以讓這部分的安全

if (isset($_POST['asking-money'])) { 
    $dailyBonus = 10000; 
    $update = mysqli_query($GLOBALS["___mysqli_ston"], "UPDATE users SET ask_time='$newtime', bonus='dailyBonus' WHERE id='$userid'"); 
// some more calculation 
} 
+4

如果使用「MySQLConverterTool」,則可以忘記安全性。沒有免費的餅乾,你知道。 –

+1

如果您有時間,應該嘗試使用[準備好的語句](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)重新編寫您的查詢。 –

+0

是的,我已經在完整的網絡文件夾上運行它。並做了備份。 @YourCommonSense – deerox

回答

2

代碼的第一位看起來像它(嚴重)增加了一個巨大的三元語句來檢查您正在使用的變量是至少集,但除此之外,你就應該能夠使用:

mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $_POST['ask_id']) 

至於與SQL查詢的安全性,儘量使用預處理語句,而不是與變量直接查詢

mysqli_prepare

+0

謝謝@簡稱爲簡短。 – deerox

+0

沒問題!,但你可能想看看不使用第三方工具來轉換你的代碼。自己學習會幫助你更仔細地理解它。正如@LabibIsmaiel所提到的,許多mysql_ *函數只是在函數名後添加了「i」。 – Rogue

2

爲mysqli_ *一部分,大部分是用來與mysql_ *做的事情幾乎保持了新的前綴相同,因此,最有可能是沒有問題的 併爲如何讓它安全,只需在查詢中使用它們之前評估和準備從用戶傳遞的所有參數,換句話說,在任何情況下都不要在查詢中直接使用用戶輸入。除此之外,代碼對我來說似乎很好。

+0

謝謝@labib讓我清楚明白。我的網站今天遭到黑客攻擊,試圖解決所有問題。:) – deerox

+0

沒問題,這就是我想要做的,乾杯。 –

0

第一個代碼是三元語句(if/else的簡短方式)。我的意見太多了。

我推薦PDO和它的prepared statements,如果你能夠使用它。這是非常安全和易於處理。

順便說一句:儘量避免MySQLConverterTool。幾個月後很難進入這個代碼。 K eep i t s mart and s imple! :-)

祝你好運!