Avatar of HitByASquirrel
HitByASquirrel
 asked on

MySQL, Searching for a nonexistant record

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);
                    }
               }
          }
     }
?>
PHP

Avatar of undefined
Last Comment
HitByASquirrel

8/22/2022 - Mon
Phetu

Hi,

You should use:

if ($check = mysql_query($query))

to check if you got something!

Hth

Phetu
HitByASquirrel

ASKER
nah, I've already tried that, for some reason, it always returns TRUE, even when there is nothing that fulfills the WHERE statement
carchitect

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

                   
             
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes
HitByASquirrel

ASKER
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
Phetu

Ok...then try
if ($row = mysql_fetch_array ($check))
Phetu
ASKER CERTIFIED SOLUTION
VGR

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
KC_Speedball

carchitect already mentioned that it should be '$dir' instead of '.$dir.'

:)
Get an unlimited membership to EE for less than $4 a week.
Unlimited question asking, solutions, articles and more.
baeuml

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
carchitect

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

sorry but use this....
regards
                   
HitByASquirrel

ASKER
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);
                    }
               }
          }
     }
Experts Exchange is like having an extremely knowledgeable team sitting and waiting for your call. Couldn't do my job half as well as I do without it!
James Murphy
HitByASquirrel

ASKER
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);
                    }
               }
          }
     }