我有一些下拉框,用于存储县和选区。
当您从下拉列表中选择一个项目并单击搜索按钮时,返回的值是所选县或选区的主键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作为返回这非常灵活。
感谢任何帮助。
答案 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)"