0

我正在尝试计算 id 与用户输入匹配的项目列表中的所有行。我正在将所有代码从 mysql 切换到 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

这是您开始绑定参数的地方。我更喜欢使用?一个数组作为输入。

假设$connMembers是您的 PDO 对象:

$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 回答