Hi Everyone
I am working through a book called Dreamweaver PHP Web Development. It has a tutorial for creating a booking system for a hotel. The because went out of publication in 2002 and there isn't a errata on the Glasshaus site for it . When creating the search page I am getting the following error message. Warning: mysql_fetch_assoc(): 2 is not a valid MySQL result resource. The page is only showing one result and I think that the error message has something to do with that.

The code for the page is as follows

<?php require_once('Connections/conn1.php'); ?>

<?php
if($_POST['bed_option'] == "less")
{
    $bcomp = "<";
}
else if($_POST["bed_option"] == "more")
{
    $bComp = ">";
}
else
{
    $bComp = "=";
}   

?>
<?php
if($_POST["price_option"] == "above")
{
    $pComp = ">";
}
else
{
    $pComp = "<=";
}   
?>
<?php
$bedComp_rsSearch = "<";
if (isset($bComp)) {
  $bedComp_rsSearch = (get_magic_quotes_gpc()) ? $bComp : addslashes($bComp);
}
$bedNum_rsSearch = "0";
if (isset($_POST['bed'])) {
  $bedNum_rsSearch = (get_magic_quotes_gpc()) ? $_POST['bed'] : addslashes($_POST['bed']);
}
$pComp_rsSearch = "<=";
if (isset($pComp)) {
  $pComp_rsSearch = (get_magic_quotes_gpc()) ? $pComp : addslashes($pComp);
}
$pNum_rsSearch = "0";
if (isset($_POST['price'])) {
  $pNum_rsSearch = (get_magic_quotes_gpc()) ? $_POST['price'] : addslashes($_POST['price']);
}
mysql_select_db($database_conn1, $conn1);
$query_rsSearch = sprintf("SELECT ID, price, bed, number FROM room WHERE bed %s %s  AND price %s %s", $bedComp_rsSearch,$bedNum_rsSearch,$pComp_rsSearch,$pNum_rsSearch);
$rsSearch = mysql_query($query_rsSearch, $conn1) or die(mysql_error());
$row_rsSearch = mysql_fetch_assoc($rsSearch);
$totalRows_rsSearch = mysql_num_rows($rsSearch);
?>
<form name="form1" method="post" action="search.php">
  <table width="400" border="0">
    <tr align="center">
      <td colspan="3">Search for a room</td>
    </tr>
    <tr>
      <td width="152" align="right">Number of beds :</td>
      <td width="38"><select name="bed_option" id="bed_option">
          <option value="more" selected>More than</option>
          <option value="less">Less than</option>
          <option value="equal">Equal to</option>
        </select></td>
      <td width="196">
      <input name="bed" type="text" id="bed" value="1" size="2"
             maxlength="2">bed(s)</td>
    </tr>
    <tr>
      <td align="right">Price Range :</td>
      <td><select name="price_option" id="price_option">
          <option value="above" selected>Above</option>
          <option value="below">Below</option>
        </select></td>
      <td>$<input name="price" type="text" id="price" value="25" size="5"
                  maxlength="5"></td>
    </tr>
    <tr>
      <td align="right">&nbsp;</td>
      <td colspan="2" align="center">
      <input type="submit" name="Submit" value="Search"></td>
    </tr>
  </table>
</form>

<?php
mysql_free_result($rsSearch);
?>
<table width="50%" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&nbsp;</font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Price</font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Bed</font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Room Number</font></td>
  </tr>
  <?php do { ?>
  <tr> 
    [B]<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&nbsp;<?php echo $row_rsSearch['ID']; ?></font></td>
    <td><?php echo $row_rsSearch['price']; ?></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&nbsp;<?php echo $row_rsSearch['bed']; ?></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&nbsp;<?php echo $row_rsSearch['number']; ?></font></td>
  </tr>
  <?php } while ($row_rsSearch = mysql_fetch_assoc($rsSearch)); ?>
</table>
<p>&nbsp;</p>

The error message says line 100 which is in the bold part of the code. Hope someone can explain what the error message means and how to fix it.
Thanks Lynne

Dani AI

Generated

Short answer: that warning means mysql_fetch_assoc() was handed something that is not a valid result resource (the "2" is just PHP's internal resource id). In this thread the usual culprits apply: the result was freed or overwritten before you tried to fetch rows, or mysql_query() did not return a SELECT resource. As pointed out, the call to mysql_free_result() appears before the output loop; that will make the resource invalid by the time your do/while runs. was right to point at the do/while start, and 's reminder about query arguments is also useful — validate operator variables and fix the inconsistent variable casing ($bcomp vs $bComp).

Practical fixes (safe, minimal changes)

  • Move the free call until after you finish fetching rows, or use a while loop that fetches until false and then free.
  • Verify mysql_query() actually returned a resource before looping (check for false and inspect mysql_error()).
  • Fix the $bcomp/$bComp typo so the chosen operator is used.

Example pattern (adjust names to match your code):

// sanitize numeric inputs
$bedNum   = isset($_POST['bed']) ? (int) $_POST['bed'] : 0;
$priceNum = isset($_POST['price']) ? (int) $_POST['price'] : 0;
// validate operator choices to avoid injection
$bedOp = ($_POST['bed_option'] ?? '') === 'more' ? '>' : (($_POST['bed_option'] ?? '') === 'less' ? '<' : '=');
$priceOp = ($_POST['price_option'] ?? '') === 'above' ? '>' : '<=';

$result = mysql_query("SELECT ID, price, bed, number FROM room WHERE bed $bedOp $bedNum AND price $priceOp $priceNum", $conn) or die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
  // output row
}
mysql_free_result($result);

Additional notes: do not rely on get_magic_quotes_gpc/addslashes for safety; cast numeric inputs or use mysql_real_escapestring for strings. The old mysql* extension is deprecated and removed in modern PHP — consider migrating to mysqli or PDO with prepared statements for security and future compatibility.

watch for next line ;) before your troubleing code
mysql_free_result($rsSearch);

<?php do { ?>

I think starting on this line onwards...

this error mainly results from wrong arguments passed to the mysql_query() function which in turn passes the values to the mysql_fetch_assoc() function,please examine your arguments supplied to mysql_query() especially where you used operators %s =%s and %s=%s

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.