我是PHP和mysql的全新产品,我正在尝试一些东西。在我的HTML中,我有一个表单,我输入里程并将其传递给PHP代码并转换为整数。然后我想采取并检查数据库隔离我想要的记录,以便我可以做一些计算。换句话说,如果输入的里程数(我将它保存在一个称为$ term的可靠数据中)小于或等于表中的里程数,我想使用符合此条件的记录。例如,我输入45英里,桌子上有40英里和50英里的记录,我想挑选50英里的水平。如果用户输入51,我想使用50级。像这样的东西。PDO select where
它很好地连接到数据库,但我不知道如何在foreach语句中构造此结构。 我有以下几点:
$term = (int)$_POST['term'];
try {
$dbh = new PDO("mysql:host=$hostname;dbname=ratetable", $username, $password);
/*** The SQL SELECT statement ***/
$sql = "SELECT * FROM rates WHERE mileage<=term";
foreach ($dbh->query($sql) as $row)
{
print $row['mileage'] .' - '. $row['ratepermile'] . '<br />';
}
/*** close the database connection ***/
$dbh = null;
}
当我这样做,我得到一个无效的参数提供的foreach()。
然后,我开始环顾四周,看到像这样的语句:
$stmt = $db->prepare('SELECT * FROM rates WHERE mileage<=:term');
,其中搜索参数传递等。
所以现在我很困惑什么正确的方法是在数据库中的里程升序列表中选择单个记录(最后匹配的记录与所有匹配的)满足条件或如何正确地构造WHERE论据。有什么建议么?
谢谢你的期待。
看看['PDO :: prepare'](http://php.net/manual/en/pdo.prepare.php)manpage关于如何使用它来正确地传递变量。 - 问题不在循环中,而是在无效的SQL查询中;你没有传递一个变量,但是用原始的<= term“指定了一个无效列。 – mario
是的,它应该是“WHERE里程<= $ term” – Nitroware
“里程<=:term”更安全,如果你做了很多PHP/MySQL编程,它非常酷且更安全,但不必要这是一个快速修复。 – Nitroware