Php 循环准备语句,需要重复什么?

Php 循环准备语句,需要重复什么?,php,prepared-statement,Php,Prepared Statement,我使用语句来防止sql注入。。。我的问题是,当循环多个查询时,我需要重复什么 如果查看第二个查询,我不确定是否需要在foreach循环中插入prepare语句 这个摘要代码有问题吗 开放数据库连接 // connect to database $conn = connect('r'); 启动第一个查询 $sql = "SELECT ... FROM ... WHERE xxx = ?"; $stmt = $conn->stmt_init(); $stmt->prepare(

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

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

这个摘要代码有问题吗

开放数据库连接

// 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();

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

从PHP手册:

对于需要多次发出的查询,您将认识到 如果准备PDOStatement对象时使用 PDO::prepare()并发出包含多个调用的语句 PDO语句::execute()


希望这有帮助。

准备和绑定可以而且应该在循环之外。好的,谢谢。我猜“$stmt=$conn->stmt_init();”不需要打两次电话,对吗?我不需要两次初始化语句?