繁体   English   中英

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

[英]simple outbound link tracker - Why isn't this working?

 <?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的答案的评论中提供了解决方案。

我建议确保您的列实际上称为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)

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

    $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了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM