2

我有一些下拉框,其中存储县和选区。

当您从下拉列表中选择一个项目并单击搜索按钮时,返回的值是所选县或选区的主键 ID。

<option value="<?php htmlout($county['ids']); ?>">
<option value="<?php htmlout($constituency['ids']); ?>">

这些值已成功返回,因为我可以使用以下方法输出它们:

    $countyid = $_GET['county'];
$constituencyid = $_GET['constituency'];

<?php echo $countyid ?>
<?php echo $constituencyid ?>

然后我有一个sql语句如下:

    $sqlparams = array();

if($countyid !== '') {
    $sqlparams[] = "county = '$countyid'";
}
if($constituencyid !== '') {
    $sqlparams[] = "constituency = '$constituencyid'";
}

$sql = "SELECT * FROM pt";

if (count($sqlparams) > 0) {
    $sql .= " WHERE " . implode(" AND ", $sqlparams); 
}

然后执行此操作并将结果存储在数组中,所有这些都有效。

但是,问题在于例如以下示例:

if($countyid !== '') {
    $sqlparams[] = "county = '$countyid'";
}

我将 'county' 一个 VARCHAR 列与 '$countyid' 一个整数进行比较。

如果有意义的话,我想知道用县名代替 $countyid 变量的最佳方法,以便我将 VARCHAR 与 VARCHAR 进行比较。

如果这很简单,我很抱歉,但我对如何做到这一点感到困惑。

我知道我可以更改下拉列表的值以返回名称,但是后台发生了一些需要返回 id 的事情,我很确定返回 id 是一种很好的做法,因为这是非常灵活的。

任何帮助表示赞赏。

4

2 回答 2

0

这样做的西方方法是使用pdo 的参数绑定

$sql = "SELECT * FROM pt 
    WHERE county = :countyid AND constituency = :constituencyid";

$sth = $dbh->prepare( $sql );
$sth->bindParam(':countyid', $countyid, PDO::PARAM_INT);
$sth->bindParam(':constituencyid', $constituencyid, PDO::PARAM_INT);

您不仅可以定义要绑定的值类型 ( PDO::PARAM_INT),还可以防止 SQL 注入。

于 2012-09-28T22:10:37.623 回答
0

假设表Counties 具有列名称和countyid:

$sqlparams[] = "county IN (SELECT name FROM counties WHERE countyid = $countyid)"

于 2012-09-28T22:14:42.870 回答