2013-03-21 98 views
0

我不得不更新我的PHP的新格式,但我與在線給出的代碼混淆。目前我使用普通的mysql,但我想將其更新爲mysqli。這裏是我有一個代碼peice的示例:Mysqli轉換建議

$checked= mysql_real_escape_string($_REQUEST["checked"]); 

我認爲這可能只是改變它的mysqli_real_escape_string的情況,但在看幾個例子的代碼後,我發現,這並不是唯一的解決方案 - mysqli :: real_eacape和mysqli-> real_escape也列出。哪一個是正確的?

謝謝

+1

中完全刪除它,並用準備好的語句是正確的解。 – jeroen 2013-03-21 18:08:44

回答

-1

正確的是程序性的風格

mysqli_real_escape_string 

和OOP風格

$mysqli->real_escape_string() 

其中$ mysqli的僅僅是一個隨機變量名稱

+0

謝謝 - 只是真正學習PHP之後感覺就像我幾乎不得不重新開始 – user2184018 2013-03-21 18:22:40

+1

最好的是BIT CHEETAH博客說,使用PDO而不是mysqli。 PDO是切割時代。 – Nikitas 2013-03-21 18:25:32

2

看一看這個http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

預處理語句是消毒數據庫查詢的正確方法,以及它在mysqli的首選方法。

爲了回答您的意見,我的帖子:

注意到有調用它的方法有兩種:面向對象和程序。

OOP使用意味着首先創建的mysqli對象是這樣的:

$mysqli = new mysqli("localhost", "my_user", "my_password", "db"); 

,然後調用逃逸功能是這樣的:

$mysqli->real_escape_string($unchecked_string); 

程序方式是通過第一連接完成到這樣的數據庫:

$link = mysqli_connect("localhost", "my_user", "my_password", "db"); 

,然後調用這樣的逃生功能:

mysqli_real_escape_string($link, $unchecked_string); 

使用OOP和準備好的語句與庫MySQLi工作的首選方式。

+0

謝謝,但是如果我不想使用預準備語句,mysqli_real_escape_string是否可以接受? – user2184018 2013-03-21 18:15:29

+0

不完全。 Mysqli_real_escape_string實際上並不能完美地清理你的查詢,並且它仍然讓你面對SQL注入攻擊。在這裏找到了一個很好的解釋:http:// stackoverflow。com/questions/5414731/are-mysql-real-escape-string-and-mysql-escape-string-sufficient-for-app-secu 因此,您應該使用mysqli或PDO中的預準備語句作爲轉義查詢對自己來說是毫無意義的。 – TonyArra 2013-03-21 18:35:04

+0

那麼我想要做的是逃避之前工作的請求,但現在我得到一個警告「警告:mysqli_escape_string()期待恰好2個參數,1給出在C:」$ username = mysqli_real_escape_string($ _REQUEST [ 「用戶名」]); – user2184018 2013-03-21 18:46:03

0

我寧願PDO來的mysqli和準備的語句自動跳脫字符串:在DB_NAME,DB_USER_NAME和DB_USER_PASS只需填寫您的網絡連接的憑據:

$con = new PDO('mysql:host=localhost;dbname=DB_NAME;charset=UTF-8', 'DB_USER_NAME', 'DB_USER_PASS'); 

$query = $con->prepare("SELECT `field` FROM `tbl_name` WHERE `field` = ?"); 
$query->bindValue(1, $field_value); 
$query->execute(); 

if($query->rowCount() > 0) { # If rows are found for query 
    echo "Field value found!"; 
} 
else { 
    echo "Field value not found!"; 
} 

準備和bindValue方法自動處理轉義數據。