0

我是 PHP 和 mysql 的新手,我在这里尝试一些东西。在我的 HTML 中,我有一个表单,我在其中输入里程,然后将其传递给 PHP 代码并转换为整数。然后我想拿它并检查数据库以隔离我想要的记录,以便我可以进行一些计算。换句话说,如果输入的里程数(我将它保存在一个名为 $term 的变量中)小于或等于表中的一个里程数,我想使用符合此条件的记录。例如,我输入 45 英里,表中有 40 英里和 50 英里的记录,我想选择 50 英里的水平。如果用户输入 51,我想使用 50 级别。像这样的东西。

它很好地连接到数据库,但我不确定如何在 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 参数。有什么建议么?

谢谢你的关注。

4

2 回答 2

0

您需要做的是将WHERE子句与ORDER BYandLIMIT子句结合使用。例如,要获得小于或等于给定搜索条件的最大值,您可以执行以下操作:

SELECT * FROM rates
WHERE mileage <= ?
ORDER BY mileage DESC
LIMIT 1

要获得大于或等于给定搜索值的最小值,请执行以下操作:

SELECT * FROM rates
WHERE mileage >= ?
ORDER BY mileage ASC
LIMIT 1

至于做实际的 PDO,你会做这样的事情:

$stmt = $dbh->prepare('SELECT * FROM rates WHERE mileage <= ? ORDER BY mileage DESC LIMIT 1');
$stmt->execute(array($term));
$row_object = $stmt->fetchObject();
于 2013-01-09T00:00:12.187 回答
0
$sql = "SELECT * FROM rates WHERE mileage<=term";

这意味着从列里程 <= 列术语的费率中选择 *。我认为您没有列术语,因为它应该是一个参数。

你看看参数是对的。代码应该是这样的:

$term = 150;
$sth = $db->prepare('SELECT * FROM rates WHERE mileage<=?');
$sth->execute(array($term));

要仅获取一条记录,您应该按列排序并仅获取 LIMIT 1

$term = 150;
$sth = $db->prepare('SELECT * FROM rates WHERE mileage<=? ORDER BY mileage DESC LIMIT 1');
$sth->execute(array($term));

因为你只想要 1 行,你可以做一个 $result=$sth->fetchColumn(); 而不是 foreach。

于 2013-01-09T00:03:24.910 回答