我可以在一个php文件中pdo准备我的所有SQL查询吗?

时间:2014-08-08 19:21:56

标签: php pdo

我们说我在下面制作文件:

database.php中

$db = new PDO("mysql:host=localhost; charset=utf8; dbname=myDb, username; password");

$sqlMyQuery1 = $db->prepare('SELECT * FROM tblTable1 WHERE Column1 = :Column1');
$sqlMyQuery1Param = array(':Column1' => $_POST[FormItem1]);

$sqlMyQuery2 = $db->prepare('SELECT * FROM tblTable2 WHERE Column1 = :Column1');
$sqlMyQuery2Param = array(':Column1' => $_POST[FormItem2]);

$sqlMyQuery3 = $db->prepare('SELECT * FROM tblTable3 WHERE Column1 = :Column1');
$sqlMyQuery3Param = array(':Column1' => $_POST[FormItem3]);

然后我将这个文件包含在我的其他php文件中,所以我可以动态地执行此操作:

$sqlMyQuery1 -> execute($sqlMyQuery1Param);

鉴于在一个真正的wesite,我会有很多疑问,它会影响我的网站的性能,因为我正在准备"每次加载页面时都会发出一堆查询?

2 个答案:

答案 0 :(得分:1)

这不仅会严重影响性能,而且RAM的使用量也会急剧上升。从PHP手册:

  

如果数据库服务器成功准备语句,PDO :: prepare()将返回PDOStatement对象。

这表明,对于每个准备,将查询数据库并创建使用RAM的对象。对于2-4个陈述来说,这不应该是一个大问题,但是有10个以上的陈述,这将是

  • 加载SQL
  • 因此将负载放在您的网络上(如果您的SQL位于外部)
  • 创造了许多无用的物品
  • 需要大量时间和
  • 在您不需要的当前范围内设置了很多变量

您可以对您的查询进行编号/命名并拥有一个可以为您创建的工厂,所以您可以这样做

factory::getQuery(4)->execute();

我为此编写了一个代码代码,使事情变得更容易;它没有为公众做好准备,但还有其他人。

答案 1 :(得分:0)

你应该准备一次,然后多次执行:

$sqlMyQuery = $db->prepare('SELECT * FROM tblTable1 WHERE Column1 = :Column1');

$sqlMyQuery1Param = array(':Column1' => $_POST[FormItem1]);
$sqlMyQuery2Param = array(':Column1' => $_POST[FormItem2]);
$sqlMyQuery3Param = array(':Column1' => $_POST[FormItem3]);

$result1 = $sqlMyQuery-> execute($sqlMyQuery1Param);

这肯定会提高性能。在同一个查询上调用prepare()会破坏准备语句的目的,有时可能会很昂贵。