如何在整个网页中保留SQL连接?

时间:2013-01-27 22:42:56

标签: html sql web

假设我正在创建一个基本页面,页面的文本会根据通过GET变量传递给它的内容而有所不同。

页面顶部有一个标题,如下所示:

<?php 
mysql_connect("stuff", "stuff", "stuff");
mysql_select_db("dbname");
mysql_query("SELECT * FROM table WHERE ID = '{$_GET['url']}'");

//Now we have connected to the SQL database.
?>

假设我在那里继续编码,那么标题文本会根据传入URL的内容而有所不同(但是,这是无关紧要的,这是我想要质疑的下一部分)。

现在让我们说,在页面的下方,还有更多的PHP代码,但中间还有更多的HTML代码。如果我想在第二个PHP代码段中再次访问数据库,是否必须重新连接到数据库?或者有没有办法确保连接会话保持打开状态,即使它是一个完全不同的<?php ?>区域?我如何制作它以便在结束<?php标记时不会删除我的SQL连接?

2 个答案:

答案 0 :(得分:1)

自: http://php.net/manual/en/function.mysql-connect.php

  

注意:   一旦脚本执行结束,服务器的链接将立即关闭,除非通过显式调用mysql_close()将其关闭。

修改

抱歉,语言不对:)

答案 1 :(得分:1)

让我们一次解决几个问题: - )

  1. 除非您自己明确执行,否则不会删除连接 。当然,当脚本结束时它将被删除。即使这样,也有持久连接连接池等技术可以帮助您避免开销。

  2. mysql_*系列功能 deprecated ,可能会很快停止工作。移动到例如,你会好得多PDO functions,更强大,更安全。

  3. 当您将_GET参数直接放在SQL查询(或其他服务器代码)中而不进行检查/验证时,您会面临包含一些令人讨厌的意外的参数的危险。除了XKCD之外,经典示例是检查$_GET['password']是否与字段password相对应。如果您只是将其编码为

    WHERE ... password ='$ _GET [密码]'

  4. 并且有人在该字段中放置值

    ' OR ''=='
    

    SQL服务器将看到

    WHERE ... password = '' OR ''==''
    

    由于'' 确实等于'',该查询将返回 true - 并且用户将在不知道密码的情况下登录。如果可能的话,这样的“SQL injection”通常可以被调整到允许攻击者被识别为站点管理员的程度,所有这些都需要。这就是为什么你想要“按原样”使用客户端参数。 PDO准备好的陈述也可以帮到那里。