php8.2 如何在不打开多个连接的情况下使用execute_query

php8.2 how to use execute_query without opening multiple connections

提问人:Kalle 提问时间:10/6/2023 最后编辑:Your Common SenseKalle 更新时间:10/7/2023 访问量:101

问:

我从 PHP7.3 跳到 PHP8.2,并寻找一个“multiple_execute_query()”函数,只连接到 mysql 一次并传输一些查询,但使用 execute_query() 以防止 sql 注入。有没有可能在没有循环和多个连接的情况下做到这一点?

PHP MySQLI

评论

1赞 Barmar 10/6/2023
@stefan_aus_hannover我认为他们正在寻找支持准备好的陈述的东西。
1赞 Barmar 10/6/2023
使用多查询而不是单独的查询从来没有太大的好处,而且它使处理结果变得更加复杂。
1赞 ADyson 10/6/2023
为什么需要多个连接?只需根据需要多次运行 execute_query()。您每次都可以使用相同的连接。你可能需要一个循环,但那又怎样?
1赞 ADyson 10/6/2023
是的,确实如此。但是你不需要多次连接,你只需要多次查询,在同一个连接上
2赞 ADyson 10/6/2023
100% 清楚:运行 execute_query() 不会打开新连接。它使用现有连接,该连接必须已打开。

答:

2赞 ADyson 10/6/2023 #1

在 mysqli 中没有支持预准备语句的等效项。multi_query

但。。。运行不会打开新连接。它使用现有连接,该连接必须已打开。因此,您无需担心多次调用该函数(例如,使用循环)。execute_query()

简单方案:

//$conn is the connection object, which we create once, here. This opens the connection
$conn = new mysqli($host, $user, $password, $db, $port);

for ($i = 0; $i < 10; $i++) {
  $j = $i*2;

  //here we execute the query many times, but always re-using the same connection object
  $conn->execute_query("UPDATE someTable SET someColumn = ? WHERE someOtherColumn = ?", [$j, $i]);
}