我正在尝试创建一个程序,用户将在表单字段中输入州名缩写,输出将是该州的大学。这是我的代码:
<?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'
");
......在阿拉巴马州的大学将出现。
我尝试了很多方法,但迄今为止都没有。我很感激帮助。
答案 0 :(得分:2)
如输出所示,$_POST
是一个数组,而不是单个元素。
使用
$abbr = mysql_real_escape_string($_POST['STABBR']);
同时获得正确的元素,并防止注入攻击。
答案 1 :(得分:0)
这是不正确的:
$abbr = $_POST;
$sql = " .... = '$abbr'";
$ _ POST是一个数组,当你在字符串上下文中直接使用数组时,你得到文字“Array”,所以你的查询实际上是
$sql = " .... = 'Array'";
您需要使用表单字段元素的名称:
<input type="text" name="state" value="AL" />
^^^^^---field name
$abbr = $_POST['state'];
^^^^^--- field name again
另请注意,您很容易受到SQL injection attacks的攻击。</ p>