BryantA Posted June 4, 2012 Share Posted June 4, 2012 Hi, I'm very new to PHP and MySQL. But I'm pretty sure there's a simple solution to my problem because there usually is. What I'm trying to do is create a search engine for a website that retrieves links from pages that I've placed in a table in my database according to their designated keywords. But every time I enter a keyword into the search box this error comes up: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/xxxxxx/public_html/search.php on line 35 No results found for "keyword" I underlined line 35 with a row of asterisks. If you think you have an idea to what my problem is I would really, really would appreciate your help. Thank you! Here is the PHP code: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Search Engine</title> </head> <body> <center> <h1>Search</h1> <form action='search.php' method='GET'> <input type='text' name='search' size='90' value='<?php echo $_GET['search']; ?>' /> <input type='submit' name='submit' value='Search' > </center> </form> <hr /> <?php $search = $_GET['search']; $terms = explode(" ", $search); $query = "SELECT * FROM search WHERE "; foreach ($terms as $each){ $i++; if ($i == i) $query .= "keywords LIKE '%$each%' "; else $query .= "OR keywords LIKE '%$each%' "; } // connect mysql_connect("localhost", "username", "password"); mysql_select_db("databasename"); $query = mysql_query($query); $numrows = mysql_num_rows($query); ************************************** if ($numrows > 0) { while ($row = mysql_fetch_assoc($query)) { $id = $row['id']; $title = $row['title']; $description = $row['description']; $keywords = $row['keywords']; $url = $row['url']; echo "<h2><a href='$url'>$title</a></h2> $description<br /><br />"; } } else { echo "No results found for \"<b>$search</b>\""; //disconnect mysql_close(); } ?> </body> </html> Quote Link to comment https://forums.phpfreaks.com/topic/263669-warning-mysql_num_rows-error/ Share on other sites More sharing options...
Psycho Posted June 4, 2012 Share Posted June 4, 2012 This forum has [ code ] tags that you can put around code so it displays in a readable format - please use them. You don't even have line breaks in what you posted. But, from what I see the code is a mess. The problem when you see these errors is that the query failed - therefore any function that tries to use the results of the query will produce errors. You need to implement error handling into your code. Below is a rewrite of your code. I changed a lot and I'm not going to take the time to explain why I changed what I did. But, you can ask specific questions if you want. <?php //Process the input (if exists) $searchTermsStr = isset($_POST['search']) ? trim($_POST['search']) : ''; $searchOutput = ''; //Var to hold the output //Verify there was a valid input if (!empty($searchTermsStr)) { // connect mysql_connect("localhost", "username", "password"); mysql_select_db("databasename"); //Create an array of search terms (filter out empty values) $searchTermsAry = array_filter(explode(" ", $searchTermsStr)); //Process terms array into Query strings foreach($searchTermsAry as $key => $value) { $value = mysql_real_escape_string($value); $searchTermsAry[$key] = "keywords LIKE '%$value%'" } //Create and run query $query = "SELECT url, title, description FROM search WHERE " . implode(' OR ', $searchTermsAry); $result = mysql_query($query); //Verify query results if(!$result) { $searchOutput .= "There was a problem running the query:<br><br>"; $searchOutput .= "Query: $query<br><br>"; $searchOutput .= "Error: " . mysql_error(); } elseif(!mysql_num_rows($result)) { $searchOutput .= "No results found for '<b>{$searchTermsStr}</b>'"; } else { while ($row = mysql_fetch_assoc($query)) { $searchOutput .= "<h2><a href='{$row['url']}'>{$row['title']}</a></h2> {$row['description']}<br /><br />"; } } //disconnect mysql_close(); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Search Engine</title> </head> <body> <center> <h1>Search</h1> <form action='search.php' method='post'> <input type='text' name='search' size='90' value='<?php echo $searchTermsStr; ?>' /> <input type='submit' name='submit' value='Search' > </center> </form> <hr /> <?php echo $searchOutput; ?> </body> </html> Quote Link to comment https://forums.phpfreaks.com/topic/263669-warning-mysql_num_rows-error/#findComment-1351235 Share on other sites More sharing options...
waynew Posted June 4, 2012 Share Posted June 4, 2012 Your query failed. Change: $query = mysql_query($query); to $query = mysql_query($query) or die(mysql_error()); and post whatever errors are shown on your screen. Quote Link to comment https://forums.phpfreaks.com/topic/263669-warning-mysql_num_rows-error/#findComment-1351237 Share on other sites More sharing options...
BryantA Posted June 5, 2012 Author Share Posted June 5, 2012 Psycho, Thank you so much for the feedback. I thought I did use the PHP code feature for this post, I guess not . Sorry though, I'll make sure to preview my post next time. But I tried to use your revised code but when I copy and paste it into Dreamweaver it shows an error on line 30 that I can't figure out. I'm sure it works. I'm pretty sure it would've been much easier to read if I would've of used the tags, silly me! But here is my original code with the code tags : Thanks again. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Search Engine</title> </head> <body> <center> <h1>Search</h1> <form action='search.php' method='GET'> <input type='text' name='search' size='90' value='<?php echo $_GET['search']; ?>' /> <input type='submit' name='submit' value='Search' > </center> </form> <hr /> <?php $search = $_GET['search']; $terms = explode(" ", $search); $query = "SELECT * FROM search WHERE "; foreach ($terms as $each){ $i++; if ($i == i) $query .= "keywords LIKE '%$each%' "; else $query .= "OR keywords LIKE '%$each%' "; } // connect mysql_connect("localhost", "username", "password"); mysql_select_db("databasename"); $query = mysql_query($query) or die(mysql_error()); $numrows = mysql_num_rows($query); ***************************************** if ($numrows > 0) { while ($row = mysql_fetch_assoc($query)) { $id = $row['id']; $title = $row['title']; $description = $row['description']; $keywords = $row['keywords']; $url = $row['url']; echo "<h2><a href='$url'>$title</a></h2> $description<br /><br />"; } } else { echo "No results found for \"<b>$search</b>\""; //disconnect mysql_close(); } ?> </body> </html> Quote Link to comment https://forums.phpfreaks.com/topic/263669-warning-mysql_num_rows-error/#findComment-1351248 Share on other sites More sharing options...
BryantA Posted June 5, 2012 Author Share Posted June 5, 2012 Waynewex, Thank you for the advice. I added the wonderful line of code that you suggested by replacing it with that original line. And the great news is I'm no longer getting that "Warning: mysql_num_rows()..." error message. But now it's showing me this error message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR keywords LIKE '%keyword%'' at line 1 I guess there might be something wrong with my MySQL database or table I'm not sure though. I know I have my collation set to "utf8_unicode_ci" because I heard that that was the best to use. Do you have any suggestions as to why it might be saying this and what I can do to fix it? Thank you so much for your help Side Note: I followed a YouTube video that gave instructions on how to code a search engine. That's where I got the code from. And as he was testing it when he was done it worked perfect for him. And all my original coding was exactly like his. I quadruple checked it! Quote Link to comment https://forums.phpfreaks.com/topic/263669-warning-mysql_num_rows-error/#findComment-1351250 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.