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」整数を比較しています。

VARCHAR と VARCHAR を比較するために、その $countyid 変数の代わりに郡の名前を取得する最良の方法を知りたいのです。

これが非常に単純な場合は申し訳ありませんが、これを行う方法について混乱しています。

ドロップダウンの値を変更して名前を返すことができることは理解していますが、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

列nameとcountyidを持つテーブルCountiesを想定します。

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

于 2012-09-28T22:14:42.870 に答える