我们说我在下面制作文件:
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,我会有很多疑问,它会影响我的网站的性能,因为我正在准备"每次加载页面时都会发出一堆查询?
答案 0 :(得分:1)
这不仅会严重影响性能,而且RAM的使用量也会急剧上升。从PHP手册:
如果数据库服务器成功准备语句,PDO :: prepare()将返回PDOStatement对象。
这表明,对于每个准备,将查询数据库并创建使用RAM的对象。对于2-4个陈述来说,这不应该是一个大问题,但是有10个以上的陈述,这将是
您可以对您的查询进行编号/命名并拥有一个可以为您创建的工厂,所以您可以这样做
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()
会破坏准备语句的目的,有时可能会很昂贵。