我有这个代码,主要是为我的网站创建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);
};
};
非常感谢。
答案 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}}分支执行的时间。
为了使其有效,您可以选择以下两个选项之一:
else
参数$link_identifier
Michael还建议检查您的mysql_query ( string $query [, resource $link_identifier ] )
是否已使用$urloriginal
进行了清理,否则您将面临SQL注入风险。