2014-10-04 47 views
0

我被告知使用PDO從數據庫安全地檢索數據。現在,我不知道這是否會是安全的或在所有工作:使用for循環的安全PDO mySQL SELECT語句

$dbtype  = "sqlite"; 
$dbhost  = "localhost"; 
$dbname  = "test"; 
$dbuser  = "root"; 
$dbpass  = "admin"; 
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 

$firstName = htmlspecialchars($_POST["firstName"]); 
foreach($conn->query('SELECT * FROM employeeTable WHERE firstName = ' . $firstName) as $row) { 
    echo $row['lastName'].' '.$row['email']; 
} 

因爲對我來說,它看起來像它仍然是可能的「注入」的東西進入查詢。

所以我的問題是:這是否真的很安全,如果沒有,我會如何安全?

回答

2

只要記住不要直接連接後變量到您的查詢,只需使用準備好的語句。並準備語句的執行後,你需要獲取結果:

$select = $conn->prepare('SELECT * FROM employeeTable WHERE firstName = :firstName'); 
$select->execute(array(':firstName' => $_POST["firstName")); 

while($row = $select->fetch(PDO::FETCH_ASSOC)) 
    echo $row['lastName'].' '.$row['email']; 
} 

這裏是一個很好看的:

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

3

我想你最好使用下面的準備時,準備過程是無效注射

$sql = 'SELECT * FROM employeeTable WHERE firstName = :firstName'; 
$sth = $conn->prepare($sql); 
$sth -> bindParam(':firstName', $firstName); 
$sth -> execute(); 
$result = $sth->fetchAll(PDO::FETCH_OBJ); 
foreach ($result as $key => $value) { 
    echo $value->lastName, $value->email; 
}