Php 重用对同一sql表的同一调用的有效方法
所以我搜索这个标题,希望有人已经回答了。然而,我在其他语言上遇到了类似的主题,但不是PHP,所以这可能会帮助其他人 我一直在使用下面的脚本来调用数据库,但是我如何创建它,以便只在类的顶部创建一次,并在类页面上需要它的每个方法中使用它呢。示例:一个页面可能没有来自同一个表的所有数据,但如果该表包含该页面50%或更多的数据,我如何修改它,以便只说一次,并让下面的其余脚本通过调用一次来显示它首先提取的数据 这是我现在拥有的Php 重用对同一sql表的同一调用的有效方法,php,mysql,Php,Mysql,所以我搜索这个标题,希望有人已经回答了。然而,我在其他语言上遇到了类似的主题,但不是PHP,所以这可能会帮助其他人 我一直在使用下面的脚本来调用数据库,但是我如何创建它,以便只在类的顶部创建一次,并在类页面上需要它的每个方法中使用它呢。示例:一个页面可能没有来自同一个表的所有数据,但如果该表包含该页面50%或更多的数据,我如何修改它,以便只说一次,并让下面的其余脚本通过调用一次来显示它首先提取的数据 这是我现在拥有的 <?php if($res = $dbConn->quer
<?php
if($res = $dbConn->query("SELECT Column FROM Table")){
while($d = $res->fetch_assoc()){
printf("Enter HTML here with proper %s", $d['Column']);
}
}
?>
我想在没有printf的情况下调用它;收集并存储数据,这样我就可以调用结果,同时用其他方法打印或回显HTML结果。什么是最有效的方法?我不想一次又一次地打同一个电话。。。好吧,你明白了
我应该使用fetch\u数组还是仍然可以使用fetch\u assoc执行此操作?您需要一个函数,该函数将查询作为参数并返回结果 像这样:
public function generate_query($sql) {
if($res = $dbConn->query($sql)){
while($d = $res->fetch_assoc()){
printf("Enter HTML here with proper %s", $d['Column']);
}
}
}
不太确定这是否是你想要的答案。 您可以在要使用该功能的页面顶部使用include/include\u once/require/require\u once 例如:
general_function.php:
-----
function generate_form( $dbConn, $sql ) {
if($res = $dbConn->query("SELECT Column FROM Table")) {
while($d = $res->fetch_assoc()) {
printf("Enter HTML here with proper %s", $d['Column']);
}
}
}
对于那些你想使用函数的页面,只需
include "$PATH/general_function.php";
并调用生成表单尝试以下操作:
class QueryStorage {
public static $dbConn = null;
public static $results = [];
public static function setConnection($dbConn) {
self::$dbConn = $dbConn;
}
public static function query($query, $cache = true) {
$result = (array_key_exists($query, self::$results))?
self::$results[$query] : self::$dbConn->query($query);
if($cache) {
self::$results[$query] = $result;
}
return $result;
}
public static function delete($query) {
unset(self::$results[$query]);
}
public function clean() {
self::$results = [];
}
}
用法:
在顶部某处传递到类的连接:
QueryStorage::setConnection($dbConn);
查询并存储它:
$result = QueryStorage::query("SELECT Column FROM Table", true);
if($result){
while($d = $result->fetch_assoc()){
printf("Enter HTML here with proper %s", $d['Column']);
}
}
在任何地方重复使用它:
$result = QueryStorage::query("SELECT Column FROM Table", true); // it will return same result without querying db second time
记住:它是运行时缓存,不会存储第二次脚本运行的结果。为此,您可以修改当前类以使其
与memcache、redis、apc等合作
如果我理解正确,那么诀窍就是创建一个关联数组,并使用其“键”访问代码
$dataArray = array();
// Add extra column in select query for maintaining uniqness. 'id' or it can be any unique value like username.
if($res = $dbConn->query("SELECT Column,id FROM Table")){
while($d = $res->fetch_assoc()){
$dataArray[$d['id']] = $d['Column'];
}
}
//you have value in the array use like this:
echo $dataArray['requireValueId'];
//or , use 'for-loop' if you want to echo all the values
你能不能把查询放在一个返回结果的函数中?然后,您可以在任何地方调用该函数,并对返回的结果执行任何操作。编辑:或者,如果您谈论的是查询本身的实际效率,那么看看缓存查询在本例中,返回结果的最有效方式是什么?使用相同的代码,但不是printf,而是使用return?或者你有更雄辩的方式来写这个吗?我喜欢这个版本,查询和存储部分只在页面顶部做一次?或者它在其他地方使用?你们在顶部包括类,然后在顶部通过连接链接。只需执行$result=QueryStorage::querySELECT表中的列;在你需要的地方。它将无缝地将查询结果存储在类结果数组中。听起来很棒!谢谢