簡體   English   中英

帶for循環的安全PDO mySQL SELECT語句

[英]Safe PDO mySQL SELECT statement with for loop

我被告知要使用PDO從數據庫中安全地檢索數據。 現在,我想知道這是否安全或完全可行:

$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'];
}

因為在我看來,仍然有可能將某些內容“注入”到查詢中。

所以我的問題是:那真的安全嗎?

我認為您最好使用以下內容進行准備,准備過程是使注射無效

$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;
}

只是要記住不要直接將post變量連接到查詢中,而應使用准備好的語句。 在執行准備好的語句之后,您需要獲取結果:

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM