【问题标题】:Can't get PHP code to work无法让 PHP 代码工作
【发布时间】:2011-10-26 17:51:09
【问题描述】:

我有这段代码,主要是为了为我的网站创建 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);
    };
};

非常感谢。

【问题讨论】:

  • 什么不起作用?预期的输出是多少?实际输出是多少?
  • 你不应该使用mysql-fetch-assoc吗? - php.net/manual/en/function.mysql-fetch-assoc.php
  • 看来你需要做一些简单的调试
  • 最后关闭您的连接,似乎您在某些情况下关闭它并为其他情况打开它。
  • 我们看不到构建$urloriginal 的组件的设置位置,但如果它们来自用户输入,请确保您已调用mysql_real_escape_string()

标签: php mysql short-url


【解决方案1】:

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

mysql_close($shortcheck);

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

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

mysql_close($shortget);

【讨论】:

  • 你说得对,他解决了这个问题后,他会遇到我描述的问题,以及你发现的SQL注入的嫌疑。
【解决方案2】:

是的,可以嵌套while语句。

一开始我没有发现的主要问题是您在查询中间关闭了连接,因此删除了所有 mysql_close 语句。

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

要使其工作,您可以选择以下两个选项之一:

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

Michael 还建议检查您的$urloriginal 是否已使用mysql_real_escape_string() 进行消毒,否则您将面临 SQL 注入的风险。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2013-07-04
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多