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

时间:2012-09-11 21:05:26

标签: php prepared-statement

我正在使用语句来防止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();

1 个答案:

答案 0 :(得分:1)

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

从PHP手册:

  

对于需要多次发出的查询,您会意识到   如果使用准备PDOStatement对象,性能会更好   PDO :: prepare()并发出多次调用的语句   PDOStatement对象::执行()。

希望这有帮助。