2013-08-29 117 views
0

我在嘗試將我的網站與PDO進行轉換,因此它對於sql注入更安全。Mysql/PDO問題

我在這裏有一個問題,我檢查,如果用戶名尚未註冊:

這是我的SQL大氣壓:

function isregistered($var,$methode) { 
    $check1 = mysql_result(mysql_query("SELECT COUNT(gebruikersnaam) FROM leden_temp WHERE ".$methode."='".$var."'"),0); 
    $check2 = mysql_result(mysql_query("SELECT COUNT(id) FROM leden WHERE ".$methode."='".$var."'"),0); 

    $check = $check1 + $check2; 

    if($check == 0) { 
     return FALSE; 
    } else { 
     return TRUE; 
    } 
} 

和我想要將其轉換以sql的方式作爲一個pdo語句:

$check1 = $dbh->query("SELECT COUNT(gebruikersnaam) FROM leden_temp WHERE ".$methode."='".$var."''); 

但我有點失去了如何這實際上會與PDO工作?你們能幫我一下嗎?

+1

你是混合mysql和PDO還是有不同的php文件? – Mihai

+0

我將我的mysql轉換爲PDO,PDO數據庫始終包含在config.php文件中。 – Kets

回答

1

如果您選擇使用準備好的語句,則會更安全。

$check1 = $db->prepare('SELECT * FROM leden_temp WHERE gebruikersnaam = :var'); 
$arr1 = array(
    ':var'=>$var 
); 
$check1->execute($arr1); 
$row_count_check1 = $check1->rowCount(); 



$check2 = $db->prepare('SELECT * FROM leden WHERE gebruikersnaam = :var'); 
$arr2 = array(
    ':var'=>$var 
); 
$check2->execute($arr2); 
$row_count_check2 = $check2->rowCount(); 



$check = $row_count_check1 + $row_count_check2; 

if($check == 0) { 
    return FALSE; 
} else { 
    return TRUE; 
} 

這樣,SQL注入,可以防止更容易

我認爲你正在使用Murfy's login-system,所以如果你想使用相同的查詢,以檢查是否有電子郵件地址已經註冊,你需要將'gebruikersnaam'改爲'email'。

+0

我沒有使用墨菲的登錄系統,這是我第一次聽到這個hehe,但這是一個函數,我可以打電話檢查臨時用戶中的郵件,但沒有激活他們的帳戶,並激活當前用戶 – Kets

+1

Murfy的登錄系統具有相同的邏輯:)。如果您需要檢查電子郵件,您可以使用上面的代碼,並簡單地將「gebruikersnaam」更改爲「電子郵件」。好吧,您必須使用相同的代碼兩次,但使用存儲過程比手動創建字符串並執行這些更安全。 –

+0

哈顯然你對Murfy的登錄系統是正確的,只是在那裏檢查了Maarten的名字。謝謝您的幫助! – Kets

-1

使用PDO不會自動使您的腳本更安全,但它確實允許使用prepared statements

根據$var$method的值來自哪裏,您仍然可能容易受到SQL注入的影響,因此您可能需要認真驗證輸入是否如預期。不幸的是,已準備好的語句不能用於列名,因此零件不能參數化。

這是參數化第一個查詢部分的代碼片段。同樣的想法也可以用於第二個查詢。

$stmt = $dbh->prepare("SELECT COUNT(gebruikersnaam) FROM leden_temp WHERE ${methode} = :methode"); 
$stmt->bindParam(':methode', $var);