因为我每次用户点击图片时都试图将计数器增加到加1。我写了下面的代码但它说了一些错误“警告:mysql_fetch_array()期望参数1是资源,布尔值在第72行的C:\ xampp \ htdocs \ tkboom \ includes \ core.php”中给出。任何人都可以看到我犯了错误的地方..
实际上我创建了2个用于递增计数器的php文件和一个用于显示计数器的php文件。在core.php文件中,我编写了函数并显示计数我创建了一个名为view.php的文件
core.php
function GenerateCount($id, $playCount) {
global $setting;
$counter_query = "SELECT hits FROM ava_games WHERE id=".$_GET['id']."";
$counter_res = mysql_query($counter_query);
while($counter_row = mysql_fetch_array($counter_res)){
$counter = $counter_row['hits'] + 1;
$update_counter_query = "UPDATE ava_games SET hits=".$counter." WHERE id=".$_GET['id']."";
$playCount = mysql_query($update_counter_query);
$playCount = $row['hits'];
}
return $playCount;
// Get count END
}
view.php
<?php
$sql = mysql_query("SELECT * FROM ava_games WHERE published=1 ORDER BY id desc LIMIT 30");
while($row = mysql_fetch_array($sql)) {
$url = GameUrl($row['id'], $row['seo_url'], $row['category_id']);
$name = shortenStr($row['name'], $template['module_max_chars']);
$playRt = GenerateRating($row['rating'], $row['homepage']);
$playCt = GenerateCount($row['id'], $row['hits']);
if ($setting['module_thumbs'] == 1) {
$image_url = GameImageUrl($row['image'], $row['import'], $row['url']);
$image = '<div class="homepage_game"><div class="home_game_image"><a href="'.$url.'"><img src="'.$image_url.'" width= 180 height= 135/></a></div><div class="home_game_info"><div class="home_game_head"><a href="'.$url.'">'.$name.'</a></div></div><div class="home_game_options"><img class="home_game_options_icon" src="'.$setting['site_url'].'/templates/hightek/images/joystick-icon.png" /> '.$playRt.' <b>|</b> '.$playCt.' plays </div></div>';
echo $image;
}
}
?>
答案 0 :(得分:4)
这很可能意味着sql语句中存在错误。您可以通过mysql_error()获取有关错误的更多信息 最简单的形式:
$counter_res = mysql_query($counter_query) or die(mysql_error());
(编辑:...最简单的形式,但是使用这种方法你不会让应用程序有机会对问题作出反应,“死”就像“死”一样。而mysql_error()可能泄漏太多信息您的网络服务/网站的用户,请参阅https://www.owasp.org/index.php/Top_10_2007-Information_Leakage_and_Improper_Error_Handling)
您的代码也很容易
答案 1 :(得分:1)
这是因为您在SQL查询中收到错误 我会稍微改变一下:
$counter_query = 'SELECT hits FROM ava_games WHERE id = ' . (int)$_GET['id'];
确保始终将id
与整数值进行比较。
答案 2 :(得分:1)
毕竟,这个查询看起来不太好。第一点:为什么使用两个查询来增加值? UPDATE ava_games SET hits=hits+1 WHERE id=".$_GET['id'].""
应该一步到位。第二点:你听说过SQL注入吗?逃避或投射$_GET['id']
以避免意外;)
答案 3 :(得分:0)
如果mysql_query
返回布尔值,则查询失败。
假定id
是主键,您可以使用以下函数在数据库级别更新,以防止竞争条件:
function GenerateCount($playCount) {
global $setting;
$update_counter_query = "UPDATE ava_games SET hits=hits + 1 WHERE id=".intval($_GET['id'])."";
mysql_query($update_counter_query) or die(mysql_error());
$counter_query = "SELECT hits FROM ava_games WHERE id=".intval($_GET['id'])." LIMIT 1";
list($playCount) = mysql_fetch_row(mysql_query($counter_query));
return $playCount;
// Get count END
}
还要注意intval()
变量周围的$_GET
以防止SQL注入
答案 4 :(得分:0)
首先转换int中的值:
function GenerateCount($playCount) {
global $setting;
$counter_query = "SELECT hits FROM ava_games WHERE id=".$_GET['id']."";
$counter_res = mysql_query($counter_query);
while($counter_row = mysql_fetch_array($counter_res)){
$counter = intval($counter_row['hits']) + 1;
$update_counter_query = "UPDATE ava_games SET hits=".$counter." WHERE id=".$_GET['id']."";
$playCount = mysql_query($update_counter_query);
$playCount = $row['hits'];
}
return $playCount;
// Get count END
}
并检查链接: