?
Solved

MySQL, Searching for a nonexistant record

Posted on 2003-03-01
11
Medium Priority
?
217 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
  • 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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

This article discusses how to implement server side field validation and display customized error messages to the client.
There are times when I have encountered the need to decompress a response from a PHP request. This is how it's done, but you must have control of the request and you can set the Accept-Encoding header.
The viewer will learn how to dynamically set the form action using jQuery.
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

616 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