What does this error mean?

Questions about the MySQL, PostgreSQL, and most other databases, as well as using it with PHP can be asked here.

Moderator: General Moderators

Post Reply
Osiris
Forum Newbie
Posts: 4
Joined: Sun Jun 12, 2005 2:38 pm
Location: Texas, USA

What does this error mean?

Post by Osiris »

Code: Select all

Warning: mysql_result(): Bad column offset specified in /home/virtual/site65/fst/home/valornianvanguard/public_html/game/frames/profile.php on line 29
What does that mean and why is it giving me that error?

Here's the associated code from code lines 22 to 42:

Code: Select all

$query1 = mysql_query("SELECT level, xp, name, inventory_id, c_class_lvl1, c_class_lvl2, c_class_lvl3, c_class_lvl4, deaths_today, dex, intel, str, con, cha, wis, attack, ac, attrib_pts_total, max_hp, max_mp, hp_left, mp_left, gold, class_skill_1, class_skill_2, class_skill_3, class_skill_lvl1, class_skill_lvl2, class_skill_lvl3 FROM characters WHERE name='$char' LIMIT 1", $conn) or die(mysql_error());
	$char_info = mysql_fetch_array($query1);
	$query2 = mysql_query("SELECT * FROM inventory WHERE id='$char_info[inventory_id]' LIMIT 1", $conn) or die(mysql_query());
	$inv_info = mysql_fetch_array($query2);
	foreach($inv_info as $inv_slot => $item_id) {
		if(($inv_slot != 'id') && ($inv_slot != 'unequipped') && ($item_id != '')) {
line 26			$query3 = mysql_query("SELECT id, name FROM items WHERE id='$item_id'", $conn) or die(mysql_error());
			$equipped_items[$inv_slot][name] = mysql_result($query3, 0, $inv_slot);
			$equipped_items[$inv_slot][url] = "items.php?item_id=".$item_id;
		} elseif(($inv_slot != 'id') && ($inv_slot != 'unequipped') && ($item_id == '')) {
			$equipped_items[$inv_slot][name] = "No Item";
			$equipped_items[$inv_slot][url] = "#";
		} elseif(($inv_slot == 'unequipped') && ($item_id != '')) {
			$unequipped_array = explode("--", $item_id);
			foreach($unequipped_array as $u_item) {
				$query4 = mysql_query("SELECT id, name FROM items WHERE id='$u_item'", $conn) or die(mysql_error());
				$item = mysql_fetch_array($query4);
				$unequipped .= "<tr><td class=\"profile_item\"><a href=\"items.php?item_id=$item[id]\">$item[name]</a></td></tr>\n";
			}
		}
	}
How can I fix it? Any help would be much appreciated.
User avatar
CoderGoblin
DevNet Resident
Posts: 1425
Joined: Tue Mar 16, 2004 10:03 am
Location: Aachen, Germany

Post by CoderGoblin »

At a guess... something like

Code: Select all

$equipped_items[$inv_slot][name] = mysql_result($query3, 0, $inv_slot);
The $inv_slot is not in the array(Maybe nothing was returned from the SQL Query ?).
In general I prefer to use mysql_fetch_assoc after trying

Code: Select all

if (mysql_num_rows($query)) {
  foreach ($row=@mysql_fetch_assoc) {
    // Process row
  }
}
Hope that helps
Osiris
Forum Newbie
Posts: 4
Joined: Sun Jun 12, 2005 2:38 pm
Location: Texas, USA

Post by Osiris »

No, that can't be it, because if you'll notice, $inv_info is a definite, defined on line 5 of the code posted above.
Osiris
Forum Newbie
Posts: 4
Joined: Sun Jun 12, 2005 2:38 pm
Location: Texas, USA

Post by Osiris »

Fixed it.

I changed this:

Code: Select all

$query1 = mysql_query("SELECT level, xp, name, inventory_id, c_class_lvl1, c_class_lvl2, c_class_lvl3, c_class_lvl4, deaths_today, dex, intel, str, con, cha, wis, attack, ac, attrib_pts_total, max_hp, max_mp, hp_left, mp_left, gold, class_skill_1, class_skill_2, class_skill_3, class_skill_lvl1, class_skill_lvl2, class_skill_lvl3 FROM characters WHERE name='$char' LIMIT 1", $conn) or die(mysql_error());
    $char_info = mysql_fetch_array($query1);
    $query2 = mysql_query("SELECT * FROM inventory WHERE id='$char_info[inventory_id]' LIMIT 1", $conn) or die(mysql_query());
    $inv_info = mysql_fetch_array($query2);
    foreach($inv_info as $inv_slot => $item_id) {
        if(($inv_slot != 'id') && ($inv_slot != 'unequipped') && ($item_id != '')) {
line 26            $query3 = mysql_query("SELECT id, name FROM items WHERE id='$item_id'", $conn) or die(mysql_error());
            $equipped_items[$inv_slot][name] = mysql_result($query3, 0, $inv_slot);
            $equipped_items[$inv_slot][url] = "items.php?item_id=".$item_id;
        } elseif(($inv_slot != 'id') && ($inv_slot != 'unequipped') && ($item_id == '')) {
            $equipped_items[$inv_slot][name] = "No Item";
            $equipped_items[$inv_slot][url] = "#";
        } elseif(($inv_slot == 'unequipped') && ($item_id != '')) {
            $unequipped_array = explode("--", $item_id);
            foreach($unequipped_array as $u_item) {
                $query4 = mysql_query("SELECT id, name FROM items WHERE id='$u_item'", $conn) or die(mysql_error());
                $item = mysql_fetch_array($query4);
                $unequipped .= "<tr><td class=\"profile_item\"><a href=\"items.php?item_id=$item[id]\">$item[name]</a></td></tr>\n";
            }
        }
    }
to this:

Code: Select all

$query1 = mysql_query("SELECT level, xp, name, inventory_id, c_class_lvl1, c_class_lvl2, c_class_lvl3, c_class_lvl4, deaths_today, dex, intel, str, con, cha, wis, attack, ac, attrib_pts_total, max_hp, max_mp, hp_left, mp_left, gold, class_skill_1, class_skill_2, class_skill_3, class_skill_lvl1, class_skill_lvl2, class_skill_lvl3 FROM characters WHERE name='$char' LIMIT 1", $conn) or die(mysql_error());
	$char_info = mysql_fetch_array($query1);
	$query2 = mysql_query("SELECT * FROM inventory WHERE id='$char_info[inventory_id]' LIMIT 1", $conn) or die(mysql_query());
	$inv_info = mysql_fetch_array($query2);
	foreach($inv_info as $inv_slot => $item_id) {
		if(!ereg("[[]]", $inv_slot)) {
			if(($inv_slot != 'id') && ($inv_slot != 'unequipped') && ($item_id != '')) {
				$query3 = mysql_query("SELECT name FROM items WHERE id='$item_id'", $conn) or die(mysql_error());
				$equipped_items[$inv_slot][name] = mysql_result($query3, 0, $inv_slot);
				$equipped_items[$inv_slot][url] = "items.php?item_id=".$item_id;
			} elseif(($inv_slot != 'id') && ($inv_slot != 'unequipped') && ($item_id == '')) {
				$equipped_items[$inv_slot][name] = "No Item";
				$equipped_items[$inv_slot][url] = "#";
			} elseif(($inv_slot == 'unequipped') && ($item_id != '')) {
				$unequipped_array = explode("--", $item_id);
				foreach($unequipped_array as $u_item) {
					$query4 = mysql_query("SELECT id, name FROM items WHERE id='$u_item'", $conn) or die(mysql_error());
					$item = mysql_fetch_array($query4);
					if(($item['id'] != '') && ($item['name'] != '')) {
						$unequipped .= "<tr><td class=\"profile_item\"><a href=\"items.php?item_id=$item[id]\">$item[name]</a></td></tr>\n";
					}
				}
			}
		}
	}
Thanks for your help. :) Somehow some integer slipped in there and threw the whole thing off... O_o Thanks again.
Post Reply