Sql查询使用smarty执行多次

时间:2012-07-16 09:32:42

标签: php mysql sql-update smarty smarty2

我正在使用Smarty进行此设置:

$smarty = new Smarty;
$smarty -> caching =3600;
$smarty -> compile_check =true;
$smarty -> compile_dir = 'theme/compile/';
$smarty -> config_dir = 'theme/libs/';
$smarty -> cache_dir = 'theme/cache/';
$smarty -> plugins_dir = 'theme/libs/plugins/';
$smarty->left_delimiter = '{';
$smarty->right_delimiter = '}';
$smarty -> clear_compiled_tpl();

我想用这个函数编写一个简单的访问者计数器:

function counter() {
    $ip = $_SERVER['REMOTE_ADDR'];
    $now = time();
    $y1 = jgmdate("Y ", $now);
    $y1 = (int) $y1;
    $m1 = jgmdate("m", $now);
    $m1 = (int) $m1;
    $d1 = jgmdate("d", $now);
    $d1 = (int) $d1;

    $result3 = mysql_query("SELECT `times`,`id` FROM `stat_ip` where `IP`='$ip' AND   `year`='$y1' AND `month`='$m1' AND `day`='$d1' ;");
    unset($n3);
    $n3 = (int) mysql_num_rows($result3);
    echo $n3;
    if ($n3 == 0) {
        mysql_query("INSERT INTO `stat_ip` (`id` ,`IP` ,`year` ,`month` ,`day`) VALUES (NULL , '$ip', '$y1', '$m1', '$d1') ;");
    } else if ($n3 == 1) {
        $row3 = mysql_fetch_array($result3);
        $s = (int) $row3['times'] + 1;
        mysql_query("UPDATE `stat_ip` SET `times` = '$s' WHERE `id` = '".$row3['id']."' ;");

    } else {
        echo("error");
    }
}

一切正常,但我的查询在这一行中执行的时间超过了一段时间(可能是所有查询):

mysql_query("UPDATE `stat_ip` SET `times` = '$s' WHERE `id` = '".$row3['id']."' ;") ;

我觉得聪明与我的问题有关!

当我写这段代码时:

$q=$smarty -> fetch('index.tpl');

当我将代码更改为:

时,查询执行一次
$q=$smarty -> fetch('index.tpl');
echo $q;

$smarty -> display('index.tpl');

我的查询执行了多次!:(

了解更多信息:

http://www.smarty.net/forums/viewtopic.php?p=81161

4 个答案:

答案 0 :(得分:1)

你为什么要打电话给$ smarty-> clear_compiled_tpl();? 它会删除所有已编译的模板,并在每次调用页面时导致重新编译。 删除此行。

您在何处以及如何致电功能计数器?

答案 1 :(得分:1)

Smarty只是一个模板引擎,它不应该导致数据库出现问题。您的问题可能在模板引擎之外的某处。

答案 2 :(得分:0)

常见错误是在html输出中有一个空的img-tag或script-tag - 这会让浏览器重新请求当前页面。

答案 3 :(得分:0)

我的问题解决了:

我使用的是在java脚本代码中包含此行的幻灯片:

我在jquery.nivo.slider.js上将src =“#”更改为src =“”

现在它工作正常,但我真的不知道为什么浏览器工作有趣!!!

谢谢