我正在嘗試創建一個程序,用戶將在表單域中輸入一個狀態縮寫,並且輸出將是處於該狀態的大學。這裏是我的代碼:
<?php
$abbr = $_POST;
print_r ($abbr);
$host='x';
$dbname='x';
$user='x';
$pass='x';
try {
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
}
catch(PDOException $e) {
echo $e->getMessage();
}
$STH = $DBH->query("
SELECT INSTNM, STABBR
FROM colleges
WHERE STABBR ='$abbr'
");
# setting the fetch mode
$STH->setFetchMode(PDO::FETCH_ASSOC);
while($row = $STH->fetch()) {
echo $row['INSTNM'] . "\n";
echo $row['STABBR'] . "<br>";
}
?>
輸出:
Array ([STABBR] => AL)
程序工作正常時,狀態縮寫中的硬編碼因此,舉例來說,如果我這樣做:
$STH = $DBH->query("
SELECT INSTNM, STABBR
FROM colleges
WHERE STABBR ='AL'
");
。阿拉巴馬州的大學將出現。
我已經嘗試了很多方法,但目前爲止還沒有工作。我很感激幫助。
**通過構建帶有外部變量的SQL語句,您將使自己對SQL注入攻擊敞開大門。**此外,任何帶有單引號的輸入數據(如名爲「O'Malley」)將炸燬你的SQL查詢。請了解使用參數化查詢(最好是使用PDO模塊)來保護您的Web應用程序。 http://bobby-tables.com/php有例子讓你開始,並且[這個問題](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php)有很多例子的細節。 –