PHP变量存储id但我需要列名以便在SQL语句中进行比较

时间:2012-09-28 21:51:41

标签: php sql

我有一些下拉框,用于存储县和选区。

当您从下拉列表中选择一个项目并单击搜索按钮时,返回的值是所选县或选区的主键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'";
}

我正在比较县&#39;带有&#39; $ countyid&#39;的VARCHAR列一个整数。

我想知道获取县名称代替$ countyid变量的最佳方法,如果这有意义,那么我将VARCHAR与VARCHAR进行比较。

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

我知道我可以更改下拉列表的值以返回名称,但是后台有一些事情需要返回id,我很确定将id作为返回这非常灵活。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

西方的方法是使用parameter binding with 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注入。

答案 1 :(得分:0)

假设一个包含列名和县名的表县:

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