无法使用PHP代码

时间:2011-10-26 17:51:09

标签: php mysql short-url

我有这个代码,主要是为我的网站创建shorurls。但我根本无法让它发挥作用。你觉得它有什么问题吗?可以在另一个内部运行while()吗?

$urloriginal = $nt['fecha']."/".$nt['titulolower'];
mysql_query("SET NAMES 'utf8'");
$shortcheck = mysql_query("SELECT * FROM shorturls WHERE urloriginal = '".$urloriginal."' LIMIT 1");
while($urlitem = mysql_fetch_array($shortcheck)) {
    if($urlitem['urloriginal'] !=  "0") {
        echo "http://neutronico.com/u/".$urlitem['id'];
    } else {
        mysql_close($shortcheck);
        mysql_query("INSERT into shorturls (urloriginal) VALUES ('$urloriginal')") 
           or die(mysql_error());
        $shortget = mysql_query("SELECT * FROM shorturls WHERE urloriginal = '".$urloriginal."' LIMIT 1");
        while($urlitem2 = mysql_fetch_array($shortget)) {
            echo "http://neutronico.com/u/".$urlitem['id'];
        };
        mysql_close($shortget);
    };
};

非常感谢。

2 个答案:

答案 0 :(得分:4)

我看到的第一个问题是你在结果集上调用mysql_close() mid-script。删除电话:

mysql_close($shortcheck);

mysql_close()旨在在资源链接上调用 - 数据库连接。不在查询结果资源上。当脚本退出时会隐式调用它,因此除非您有特定的内存要求,否则根本不需要调用它。我想你打算打电话给mysql_free_result(),但是这个被隐式调用,除非你需要管理内存,否则你不需要调用它。

稍后,删除此调用,因为它没有关闭MySQL资源链接。

mysql_close($shortget);

答案 1 :(得分:1)

是的,可以嵌套while语句。

我最初没有发现的主要问题是您在查询过程中关闭了连接,因此删除了所有mysql_close语句。

然而,在你解决这个问题之后,你将面临另一个问题,因为你只使用一个MySQL连接,第二个查询丢失了第一个查询的所有结果,所以可能你停在第一行,或者第一个<{1}}分支执行的时间。

为了使其有效,您可以选择以下两个选项之一:

  • 使用两个MySQL连接,并使用else参数$link_identifier
  • 指定要使用的连接
  • 运行第一个查询,将所有结果保存在一个数组中,然后运行其他查询,这样查询就不会重叠。仅当您的桌子不是太大时才使用此选项。

Michael还建议检查您的mysql_query ( string $query [, resource $link_identifier ] )是否已使用$urloriginal进行了清理,否则您将面临SQL注入风险。