?
Solved

MySQL, Searching for a nonexistant record

Posted on 2003-03-01
11
Medium Priority
?
216 Views
Last Modified: 2008-02-26
this is a piece of a module detection script for a dynamic content engine i am making.

If a module is in the folder, it adds it to the database when the admin tool is called.

It checks to see if the module is already in the database, and if it is in the folder, but not in the database, then it adds it to the database

the problem is where it says if(!mysql_num_rows($check)) { It functions perfectly fine, but MySQL outputs an error when it does not find anythign in the database and says that the result from mysql_num_rows() is invalid

thanks a lot if you can help XD

<?php
     //search for uninstalled modules
     $curdir = opendir("modules");
     include($connect_src);
     while($dir = readdir($curdir)) {
          if(strlen($dir) >= 4){
                $dirstr = $dir[0].$dir[1].$dir[2].$dir[3];
               if(is_dir("modules/".$dir) && ($dirstr == "dce_") && is_file("modules/".$dir."/info.php")) {
                    $query = "SELECT dir_name FROM modules WHERE dir_name = '".$dir."'";
                    $check = mysql_query($query);
                    if(!mysql_num_rows($check)) {
                         include("modules/".$dir."/info.php");
                         $query = "INSERT INTO modules VALUES ('NULL','".$name."','".$dir."','".$root."modules/".$dir."','".$version."','".$vers_output."','".$creator."',NOW())";
                         register_module($connect_src,$query);
                    }
               }
          }
     }
?>
0
Comment
Question by:HitByASquirrel
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
  • +3
11 Comments
 
LVL 2

Expert Comment

by:Phetu
ID: 8050294
Hi,

You should use:

if ($check = mysql_query($query))

to check if you got something!

Hth

Phetu
0
 

Author Comment

by:HitByASquirrel
ID: 8050586
nah, I've already tried that, for some reason, it always returns TRUE, even when there is nothing that fulfills the WHERE statement
0
 
LVL 6

Expert Comment

by:carchitect
ID: 8050800
simply use

$rowcnt=mysql_num_rows($check);

if($rowcnt==0)
{
 include("modules/".$dir."/info.php");
 $query = "INSERT INTO modules VALUES ('NULL','".$name."','".$dir."','".$root."modules/".$dir."','".$version."','".$vers_output."','".$creator."',NOW())";
 register_module($connect_src,$query);
}

and one more thing

$query = "SELECT dir_name FROM modules WHERE dir_name = '$dir'";

regards

                   
             
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:HitByASquirrel
ID: 8050856
nope, same thing as before, i think its more of a problem with the query perams rather than how i handle the result

hers the error:

Warning:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/waveform/public_html/wdg-dcm/wdcm_dce_scan.php on line 29
0
 
LVL 2

Expert Comment

by:Phetu
ID: 8050879
Ok...then try
if ($row = mysql_fetch_array ($check))
Phetu
0
 
LVL 15

Accepted Solution

by:
VGR earned 300 total points
ID: 8051015
OF COURSE
{
$query = "SELECT dir_name FROM modules WHERE dir_name = '".$dir."'";
$check = mysql_query($query);
if(!mysql_num_rows($check)) {
                       

this WON'T WORK (too bad I was sleeping :D )

FIRST do :

$check = mysql_query($query) OR DIE("BAD QUERY '$query' Mysql said : ".mysql_error());
 
//ONLY AFTERWARDS CAN YOU USE $check !!!!!!!!!
0
 
LVL 1

Expert Comment

by:KC_Speedball
ID: 8051751
carchitect already mentioned that it should be '$dir' instead of '.$dir.'

:)
0
 

Expert Comment

by:baeuml
ID: 8051972
Just use

$res = mysql_query("SELECT COUNT(*) FROM modules WHERE dir_name = '$dir'");
$count = mysql_fetch_row($res);
if (!$count[0]) {
   do_your_stuff();
}

-baeuml
0
 
LVL 6

Expert Comment

by:carchitect
ID: 8052084
$query = "SELECT dir_name FROM modules WHERE dir_name = '".$dir."'";

sorry but use this....
regards
                   
0
 

Author Comment

by:HitByASquirrel
ID: 8052309
it didn't fix it, but MySQL said that ther was no databse connection, so i moved the connect to inside the loop, and now it works ^_^ thanks guys!

<?
     //search for uninstalled modules
     $curdir = opendir("modules");
     while($dir = readdir($curdir)) {
          if(strlen($dir) >= 4){
                $dirstr = $dir[0].$dir[1].$dir[2].$dir[3];
               if(is_dir("modules/".$dir) && ($dirstr == "dce_") && is_file("modules/".$dir."/info.php")) {
                    include($connect_src);
                    $query = "SELECT dir_name FROM modules WHERE dir_name = '".$dir."'";
                    $check = mysql_query($query) OR DIE("BAD QUERY '$query' Mysql said : ".mysql_error());
                    $check_res = mysql_num_rows($check);
                    if($check_res == 0) {
                         include("modules/".$dir."/info.php");
                         $query = "INSERT INTO modules VALUES ('NULL','".$name."','".$dir."','".$root."modules/".$dir."','".$version."','".$vers_output."','".$creator."',NOW())";
                         register_module($connect_src,$query);
                    }
               }
          }
     }
0
 

Author Comment

by:HitByASquirrel
ID: 8052329
ok, heres the more efficient code:

<?

     //search for uninstalled modules
     $curdir = opendir("modules");
     while($dir = readdir($curdir)) {
          if(strlen($dir) >= 4){
                $dirstr = $dir[0].$dir[1].$dir[2].$dir[3];
               if(is_dir("modules/".$dir) && ($dirstr == "dce_") && is_file("modules/".$dir."/info.php")) {
                    include($connect_src);
                    $check = mysql_query("SELECT dir_name FROM modules WHERE dir_name = '".$dir."'") OR DIE("BAD QUERY '$query' Mysql said : ".mysql_error());
                    $check_res = mysql_num_rows($check);
                    if(!$check_res) {
                         include("modules/".$dir."/info.php");
                         $query = "INSERT INTO modules VALUES ('NULL','".$name."','".$dir."','".$root."modules/".$dir."','".$version."','".$vers_output."','".$creator."',NOW())";
                         register_module($connect_src,$query);
                    }
               }
          }
     }
0

Featured Post

New benefit for Premium Members - Upgrade now!

Ready to get started with anonymous questions today? It's easy! Learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Popularity Can Be Measured Sometimes we deal with questions of popularity, and we need a way to collect opinions from our clients.  This article shows a simple teaching example of how we might elect a favorite color by letting our clients vote for …
Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …
Suggested Courses

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question