0

IDがユーザー入力と一致するアイテムリストからすべての行を数えようとしています。私はすべてのコードをmysqlからPDOに切り替えています.PDOの方がはるかに優れていることがわかりました.

以下のコードは、私の状況で動作することがわかったものです。

$id = '0';
$sql="SELECT count(*) FROM item_list WHERE item_id = $id";
$data=$connMembers->query($sql)->fetchcolumn();     
echo $data;

ただし、SQL インジェクションのため、ライブ サイトでは安全ではありません。

ユーザー入力をサナタイズするように変更する方法を知りたいです。

変数が個別に保持されるように、準備関数と実行関数を使用することをお勧めします。

それで、私にできることはありますか?

4

1 に答える 1

2

ここでパラメータのバインドを開始します。?私は、入力用に 1 つの配列を使用してそれを行うことを好みます。

あなたのPDO$connMembersオブジェクトは次のとおりです。

$sql="SELECT COUNT(*) FROM item_list WHERE item_id = ?";
$input=array($id); //Input for execute should always be an array

$statement=$connMembers->prepare($sql);
$statement->execute($input);
$data=$statement->fetchObject();

var_dump($data);

SQL にさらに変数を追加するには、別?の変数をクエリに追加し、その変数を入力に追加します。

$sql="SELECT COUNT(*) FROM item_list WHERE item_id = ? AND item_name=?";
$input=array($id, $name); //Input for execute should always be an array

$statement=$connMembers->prepare($sql);
$statement->execute($input);
$data=$statement->fetchObject();

var_dump($data);

または、bindParam を使用できます。

$sql="SELECT COUNT(*) FROM item_list WHERE item_id = :itemID";

$statement=$connMembers->prepare($sql);
$statement->bindParam(':itemID', $id);
/*Here I am binding parameters instead of passing
an array parameter to the execute() */


$statement->execute();
$data=$statement->fetchObject();

var_dump($data);
于 2013-01-12T01:24:04.097 に答える