2013-04-03 73 views
1

我目前已經習慣了mysqli,並試圖轉換我在mysql中編寫的代碼。我使用Procedural風格來轉換代碼,但是我意識到在mysqli中,您可以使用預準備語句,而不是使用mysqli_real_escape_string。我試圖理解這些準備好的陳述,但是我無法理解他們。我如何將下面的代碼轉換爲準備好的語句?使用預處理風格的語句

function user_exists($email){ 
$query = mysqli_query($GLOBALS["___mysqli_ston"], "SELECT `mem_id` FROM `members` WHERE `mem_email`='$email'"); 
$query_result = mysqli_num_rows($query); 
return $query_result; 
} 

回答

1
function user_exists($email){ 
    $stmt = mysqli_prepare($GLOBALS["___mysqli_ston"], "SELECT `mem_id` FROM `members` WHERE `mem_email`=?"); 
    mysqli_stmt_bind_param($stmt,"s",$email); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_store_result($stmt); 
    $query_result=mysqli_stmt_num_rows($stmt); 
    mysqli_stmt_free_result($stmt); 
    return $query_result; 
} 

嚴重的是,使用OOP風格會更好......

function user_exists($email){ 
    global $___mysqli_ston;//just follow your style 
    $stmt = $___mysqli_ston->prepare("SELECT `mem_id` FROM `members` WHERE `mem_email`=?"); 
    $stmt->bind_param("s",$email); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $query_result=$stmt->num_rows; 
    $stmt->free_result(); 
    return $query_result; 
} 
+0

使用OOP將意味着不得不改變我的連接是否正確?我不能使用OOP和Procedural的混合?這是一個痛苦,因爲我幾乎用程序 – jhetheringt7

+0

@ user1064811完成了轉換。我提供了一個過程樣式。並從[官方文檔](http://www.php.net/manual/en/mysqli.construct.php)和[幾種方法](http://www.php.net/manual/en/mysqli。 prepare.php),'mysqli_connect'返回與'new mysqli()'相同的東西(除非有錯誤),所以我認爲你可以混合使用這兩者。 – Passerby