0

我正在使用语句来防止 sql 注入...我的问题是循环多个查询时我需要重复什么?

如果您查看第二个查询,我不确定准备语句是否需要在 foreach 循环中

这个摘要代码有问题吗?

打开数据库连接

// connect to database   
$conn = connect('r');

启动第一个查询

$sql = "SELECT ... FROM ... WHERE xxx = ?";

$stmt = $conn->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('i', $albumid);
$stmt->bind_result(..., ...);
$stmt->execute();
$stmt->store_result();
$num_rows = $stmt->num_rows;

if ($num_rows  > 0) {
   loop results...
}

$stmt->free_result();

第二个重复查询:

$sql = "SELECT ... FROM ... WHERE xxx = ?";

$stmt = $conn->stmt_init();
$stmt->prepare($sql); ///??????? inside or outside foreach loop ?????

foreach (... as $key => ...) {
    $stmt->bind_param('i', $key);
    $stmt->bind_result(...);
    $stmt->execute();
    $stmt->store_result();
    $num_rows = $stmt->num_rows;

    if ($num_rows  > 0) {
       loop results...
    }

   $stmt->free_result();
}

关闭数据库

// close database
$conn->close();
4

1 回答 1

1

您不必多次准备查询。只需绑定参数并多次执行即可。

来自 PHP 手册:

对于需要多次发出的查询,如果您使用 PDO::prepare() 准备 PDOStatement 对象并通过多次调用 PDOStatement::execute() 发出语句,您将获得更好的性能。

希望这可以帮助。

于 2012-09-11T21:13:20.223 回答