简单的出站链接跟踪器 - 为什么这不起作用?

时间:2012-01-05 20:13:49

标签: php mysql

 <?php 
/** Connect to DB */
 mysql_connect("localhost", "dbuser", "pass") or die(mysql_error()); 
 mysql_select_db("dbname") or die(mysql_error()); 

$link_id = $_GET['link_id'];

/** increase the counter of the URL*/
mysql_query("UPDATE link_count SET count = count + 1 WHERE ID = $link_id") or die(mysql_error()); 

/** retrieve URL */
$result = mysql_query("SELECT * FROM link_count WHERE ID = $link_id") or die(mysql_error()); 
$row = mysql_fetch_array($result); 

header( "Location:" .$row['URL'] ); 
?>

当然,数据库信息已在此处发布。我尝试使用的地方

count.php?link_id=1

在链接中,我在“where子句”中获得“未知列'ID'”

我检查确保所有单引号而不是反引号....

编辑:@Kai Qing在评论CanSpice答案时提供的解决方案。

3 个答案:

答案 0 :(得分:3)

我建议确保您的列实际上是ID而不是ID。它告诉你列不存在,这可能是因为它实际上不存在为类型。此外,count是一个保留的mysql术语。把它改成这个:

mysql_query("UPDATE link_count SET `count` = `count` + 1 WHERE ID = $link_id") or die(mysql_error()); 

在你进行注射孔演讲之前,请将你的$ link_id包装起来:

mysql_real_escape_string($link_id)

答案 1 :(得分:2)

您的列可能名为id,而不是ID。列名称区分大小写。

答案 2 :(得分:0)

    $sql = sprintf("UPDATE link_count SET count = count + 1 WHERE ID = %s",mysql_real_escape_string($_GET['link_id']));
    mysql_query($sql) or die(mysql_error()); 

此外,您可能不希望在生产中打印出所有mysql_errors。