PHPでのSQLインジェクション対策


PHPにSQLインジェクション対策をしたいのですが、

[code]

    "SELECT * FROM hogehoge WHERE id = '$id' AND number = '$data'
    
[/code]

というSQL文を組み立てる場所で、idには引数として整数が入るので文字列リテラルで対策出来ますが、dataには  
`>>整数`  
という引数を渡すので、文字列リテラルでは対策出来ないという状況に陥っています。  
どうすればいいですか?

追記

[code]

    $dbh->query("SET NAMES 'hogehoge'");
    $sql = "SELECT * FROM replys WHERE id = ? AND data = ?";
    $sth = $dbh->prepare($sql,array('integer'),array('string'));
    $sth->execute(array($id),array($data));
    
[/code]

というコードですが、$dataに`>>整数`を引数として渡すと、弾かれます。




追記の部分、私が見たことのない構文なのですが、MySQLiでしょうか、PDOでしょうか?それとも全く別の何かのフレームワークを使っておられるのでしょうか?

とりあえずPDOだと仮定する([`PDO::prepare`](https://www.php.net/manual/en/pdo.prepare.php)のページと変数の使い方が似ているので)と、書き方が根本的におかしいです。

[code]

    $sql = "SELECT * FROM replys WHERE id = ? AND data = ?";
    $sth = $dbh->prepare($sql);
    $sth->execute([$id, $data]);
    
[/code]

あなたの使われている枠組みによっては、全く役に立たないかもしれません。その場合には、きちんとご自身の使われている枠組みをご説明ください。また、うまくいかない場合には「弾かれます」といった曖昧な表現を使われると、読んでいる人間には一体何が起こったのかがさっぱり伝わりません。エラーメッセージなどの重要な情報を必ずお示しください。

