我创建了一个片段,从数据库表中提取数据并以表格格式显示。该片段将id作为参数,并将其添加到sql查询中。
我的问题是,如果我在同一页面上有超过1个片段调用(有时需要页面上显示的不同id的表格数据),则所有表格数据都与最后一次数据库调用相同最后一段摘录。
如果不缓存片段数据库调用并让它们都显示自己的内容,我需要做些什么?
我已尝试将页面设置为无缓存。也用[! !]用于片段调用的括号,甚至使用了function_exists()方法,但它们都没有帮助。
有人可以帮助我吗?
感谢
答案 0 :(得分:0)
在代码段的末尾试试这个:
mysql_connect('host', 'user', 'pass');
mysql_select_db('db_name');
您需要指定课程的连接参数。
答案 1 :(得分:0)
如果您可以发布您的代码段,将有助于回答。我通过页面上的多个调用执行此操作而没有问题,因此代码段内部存在任何错误,或者您需要输出到唯一的占位符名称。
答案 2 :(得分:0)
您遇到了ModX的故障,我花了很长时间才解决。 ModX通过使用散列进行了大量的缓存,显然,当在一个页面内分割多个片段的多个连接时,可以看到这种不稳定的行为。这很可能是非常不受欢迎的行为,它可以很容易地解决,但除此之外会让你头疼。
一个sympton是$modx->getObject($classname, $id)
返回null(经常)。
解决方案非常简单:
要么使用带有单个数据库实例的静态类,要么使用
使用$modx->setPlaceholder($instance, $tag);
或其组合。
我的解决方案是:
class dt__xpdo {
private function __construct() {}
public function __destruct() {
$this->close();
}
static public function db($modx = null) {
if ($modx->getPlaceholder('dt_xpdo') == '') {
$dt_user = 'xxxxxxxxx';
$dt_pw = 'xxxxxxxxx';
$dt_host = 'localhost';
$dt_dbname = 'xxxxxxxxx';
$dt_port = '3306';
$dt_dsn = "mysql:host=$dt_host;dbname=$dt_dbname;port=$dt_port;charset=utf8";
$dt_xpdo = new xPDO($dt_dsn, $dt_user, $dt_pw);
$dt_xpdo->setPackage('mymodel', MODX_CORE_PATH.'components/mymodel/'.'model/', '');
//$modx->log(modX::LOG_LEVEL_DEBUG, 'mymodel.config.php');
//$modx->log(modX::LOG_LEVEL_DEBUG, 'Could not addPackage for mymodel!');
$modx->setPlaceholder('dt_xpdo', $dt_xpdo);
}
return $modx->getPlaceholder('dt_xpdo');
}
}
现在您可以在代码中使用:
require_once 'above.php';
并使用类似
的内容 $xpdo = dt__xpdo::db($modx);
继续完美无缺!