我正在尝试将一个简单的脚本实现到一个网站中,以计算大多数访问过的页面并将前10个列表作为输出。作为一个业余爱好者(在php / mysql中)我无法弄清楚为什么在执行代码时字段没有填充适当的数据。
以下是代码:
$pagename = $_SERVER['PHP_SELF'];
$sql = "UPDATED visits SET hits=hits+1 WHERE pagename='$pagename' LIMIT 1";
$res = mysql_query($sql);
if(!$res) {
}
错误处理不显示任何错误,但表仍为空。我错过了什么? (我试图通过以mysql的root用户身份启动会话来执行此操作,因此所有权限都存在,并且我创建了字段:pagename,hits。)。 我试过使用其他代码:
*$sql = "CREATE TABLE 'yourDatabaseName'.'count' ('id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 'count' INT NOT NULL, 'page_id' INT NOT NULL) ENGINE = MyISAM;";
mysql_query($sql) or die('<p>Error, the count table was not created.</p>');
$query = "INSERT INTO count (page_id) VALUE ('$thePageID')";
mysql_query($query) or die('<p>Error, the Page ID was not entered into the table field.</p>');
$data = mysql_query("SELECT * FROM count WHERE page_id='$thePageID'")
or die(mysql_error('Could not find the page id in the count table.'));
while($info = mysql_fetch_array( $data ))
{
$count=$info['id'];
$count = $count + 1;
}
$querytwo = "UPDATE 'count' SET 'count' = '$count' WHERE 'page_id' ='$thePageID'";
mysql_query($querytwo) or die('Error, the count was not updated');*
并且page_id / id字段将被更新,但不是“count”字段(错误处理在这种情况下返回错误tho'..)。我确定我在这里遗漏了一些简单的东西,因为这两个脚本的问题基本相同..
答案 0 :(得分:1)
更新仅更新现有行。在更新可以增加计数之前,您需要首先添加具有给定页面名称且首先计数为0的行。
或者,试试这个SQL:
$sql = "INSERT INTO visits (pagename, hits) VALUES ('$pagename', 0) ON DUPLICATE KEY UPDATE hits=hits+1";"
另请注意,您的SQL查询应显示为“UPDATE”而不是“UPDATED”:)
答案 1 :(得分:0)
首先想到......应该这样:
$sql = "UPDATED visits SET hits=hits+1 WHERE pagename='$pagename' LIMIT 1";
是
$sql = 'UPDATE visits SET hits=hits+1 WHERE pagename=' . mysql_real_escape_string($pagename) . ' LIMIT 1';
失败的原因是由于UPDATE(D)语句,我也修改了您的查询,因此您的$ pagename无法“注入”,请参阅:http://en.wikipedia.org/wiki/SQL_injection。
您可能还想考虑使用mysqli,因为在最新版本的PHP中不推荐使用mysql。
答案 2 :(得分:0)
在UPDATE拼写错误之外,当然与第二个例子不同,
我也关心你在表格列名中的内容。我猜你有像index.php这样的东西。如果是这种情况,并且您碰巧从sub/index.php
访问了文件,则$_SERVER['PHP_SELF'];
会生成/sub/index.php
,因此会根据您的WHERE CLAUSE
返回false。所以试着回声
echo $_SERVER['PHP_SELF'];
查看结果并确保数据库具有相同的值,目录和文件名。因为我看不到你在那里有什么,我也猜测你在那里也有文件扩展名,没有额外的字符。
如果您修复了错误的UPDATE拼写,并验证您的数据库中的内容与回显$ _SERVER ['PHP_SELF']的内容相匹配;你的第一个代码应该更好。