【发布时间】:2015-09-20 14:52:05
【问题描述】:
我有一个脚本,可以在 5 个表上发送超过 10 个所有 CRUD 类型的查询(一些 SELECTs 和 JOINs)。最初,我对所有这些都使用了mysqli_* 函数。现在,为了提高安全性,我正在移植代码以使用准备好的语句。
我以前没有使用准备好的陈述的经验,我对什么可以做什么和不可以做什么有一些疑问。例如,假设我从 SELECT 查询开始,然后是 UPDATE,最后是 INSERT。
我的问题是:
我应该为每个查询重复mysqli_stmt_init 和mysqli_stmt_close,还是我可以在第一个查询之前启动一次prepare 每个查询的语句并使用它并在所有查询完成后最后关闭它?也就是说,方法2可以吗,还是我应该坚持方法1?
方法 1 - 不重复使用
// SELECT
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT on table 1 and table 2");
...
mysqli_stmt_close($stmt);
// UPDATE
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "UPDATE on table 3");
...
mysqli_stmt_close($stmt);
// INSERT
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "INSERT INTO table 4");
...
mysqli_stmt_close($stmt);
方法 2 - 重用语句
// INIT
$stmt = mysqli_stmt_init($link);
// SELECT
mysqli_stmt_prepare($stmt, "SELECT on table 1 and table 2");
...
// UPDATE
mysqli_stmt_prepare($stmt, "UPDATE on table 3");
...
// INSERT
mysqli_stmt_prepare($stmt, "INSERT INTO table 4");
...
// CLOSE
mysqli_stmt_close($stmt);
【问题讨论】:
标签: php mysqli prepared-statement