多个预备语句,保持活动直到完成页面

时间:2014-05-11 23:14:23

标签: php mysqli prepared-statement

让我们说一个网页上有一些类。一个是加载Mysqli在开始时将它连接到DB并保持连接。现在的问题是:

是否有良好的解决方案make(示例设置类)准备好的语句,用于从DB表'settings'调用值并保持打开(语句)直到完成(在页脚关闭语句和连接)或只是从'settings'加载所有数据php中的数据库表到array(),只是从数组中调用它而不是从DB绑定它。

第二个问题是,如果我有语句打开,我可以为另一个类(从DB调用文本的示例类)打开另一个语句,并像前面的例子一样做吗?当然,在完成页面关闭它。

是否存在任何性能或安全问题,您可以在那里看到......

2 个答案:

答案 0 :(得分:2)

  1. 据我所知,没有人这样做。主要是因为多次执行的真正好处并不像有些想象的那么大,而且不值得麻烦。对于少量运行的短主键查找(最多几十次),您几乎无法区分。
    (但是,也没有反对这种做法的论据 - 如果你愿意的话,你可以这样做,单个语句准备/多次执行)。

  2. 然而,获取不超过数百条记录的单个查询仍然比单独的查询(甚至是准备好的)获得相同的数量更快。因此,只要您的设置保持适中的数量,最好一次性完成。

  3. 是的,当然你可以根据需要准备多少份陈述 (唯一的问题可能是获取结果。您必须始终使用get_result / store_result,以确保没有待处理的结果并阻止其他查询运行(常规或准备)。

答案 1 :(得分:1)

该语句作为数据库连接上的一个SQL语句执行。它不会继续回到数据库并一次抓取一行,所以不要担心。

通常,您应该将所有内容加载到某些数据结构中。如果您的查询返回的数据超出了您的需求,那么您需要在查询中修复这些数据。不要运行返回大量数据的SQL,然后依靠PHP逐行遍历它并对其执行一些大量操作。只需编写首先获得所需内容的SQL即可。我意识到这并不总是可行,但当人们谈论优化他们的网站时,查询优化通常位于该列表的顶部/附近,因此它非常重要。

你肯定应该执行多个语句。在获取任何数据之前保持打开和关闭整个数据库连接是愚蠢的。