【问题标题】:Two Rows Get Inserted with One INSERT statement?用一个 INSERT 语句插入两行?
【发布时间】:2010-01-06 18:21:48
【问题描述】:

下面的这个函数怎么可能在我的数据库中插入两行?

//called like
save_session_db($_SESSION['user_id']);

function save_session_db($session){
    include('includes/db-connect.php');
    $connectionInfo = array( 'Database' => 'Belior');
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    if($conn){
        $date = date('l jS \of F Y');
        $_SESSION['model_start_date'] = $date;
        $tsql = "INSERT INTO User_Session (user_id, date_created) VALUES ('$session', '$date')";
        echo 'insert--<br>'.$tsql;
        if(sqlsrv_query($conn, $tsql))  {
            return true;
        }else{
            return false;
        }
    }else{
           return false;
    }
    sqlsrv_close($conn);
}

此函数不会从其他任何地方调用。当我评论上面的函数调用时,没有任何东西被插入到数据库中。而且 PHP 不会抱怨无效的函数调用,这意味着它不会从其他任何地方调用。

当我取消注释函数调用时,会插入两行!

感谢大家的帮助。我确信它很简单,我只是想不通。以前可以用,我不记得我调整了什么。

更新

看起来好像我的每个页面都被加载了两次?!为什么?我在任何地方都没有执行此操作的 htaccess 文件?

127.0.0.1 - - [06/Jan/2010:18:34:00 +0000] "GET /webs/end/create.php HTTP/1.1" 200 44830
127.0.0.1 - - [06/Jan/2010:18:34:06 +0000] "GET /webs/end/create.php HTTP/1.1" 200 44830

【问题讨论】:

  • 回显语句是打印一次还是两次?
  • 一次 - 它显示正确的 tsql 语句。

标签: php sql-server tsql


【解决方案1】:

调用这个函数的代码会不会被调用了两次?例如,如果您的页面由于某种原因被重新加载两次? 尝试在调用此函数的代码中添加一些回声。也许你会得到答案。

【讨论】:

  • 我已经输入了一个回显 var $tsql 并打印一次的回显。
  • 如果您检查您的 access.log,如果您刷新一次,页面会加载多少次? (您使用哪种浏览器?)
  • 您使用哪种浏览器?如果您切换浏览器,页面是否仍会加载两次?
  • 亲爱的上帝!我发现了一个狡猾的 htaccess 文件 - 有一些重写。史诗般的失败。谢谢大卫和吉米。 :)
  • 我猜它的加载速度太快了,我没有注意到,并且只会输出一件事,因为我只看到第二次重新加载。
【解决方案2】:

如果它真的只执行一次,那么它似乎表明服务器上发生了一些事情。例如,表User_Session 可以有一个触发器来添加一个额外的行。不过,这似乎是您可能知道的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2016-07-27
    相关资源
    最近更新 更多