【发布时间】:2012-09-11 21:05:25
【问题描述】:
我正在使用语句来防止 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();
【问题讨论】:
-
prepare 和 bind_* 可以而且应该在循环之外。
-
好的,谢谢。我猜'$stmt = $conn->stmt_init();'不需要调用两次,对吗?我不需要两次初始化语句?