@mysql_query and mysql_query whats the difference?

hi

I have 2 scripts that do very similar things,  one has this line
  $ret = @mysql_query($sql);
and the other
  $ret = mysql_query($sql);

the SQL is for all puropses the same.  want to know what the @ mark means.  

michael
LVL 1
ussherAsked:
Who is Participating?
 
Richard QuadlingSenior Software DeveloperCommented:
@ means suppress any non fatal errors.

In fact it may even suppress them!

If using @, normally the next line of code will be determining if the result is a failure (in context with the function).

e.g. (from my own DB class)

      private function MakeDBConnection($objKrypt)
            {
            $resResult = @odbc_pconnect($this->DSN, $this->sUser, $objKrypt->Dekrypt($this->sPassword));
            if ($resResult === False)
                  {
                  throw new class_DB_Exception(
                        class_DB_Exception::DB_ERROR_SERVER_CONNECT,
                        array(
                              $this->sServer
                              )
                        );
                  }
            return $resResult;
            }

As you can see the odbc_pconnect() function can be false. Normally this will output a message also. By using @ the message is not reported and I can still continue testing the result.
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
@ supresses that the page prints out a error message, so you can handle it (using mysql_error() )

@ can be used for ALL functions, not only mysql...
0
 
ussherAuthor Commented:
so if error reporting is turned off at the server level both statements are exactly the same?
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

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.

 
Richard QuadlingSenior Software DeveloperCommented:
I think so. But just because you can't see the error, doesn't mean the function hasn't worked!

Error suppression is not a route to take if you want to have a stable app.

0
 
Richard QuadlingSenior Software DeveloperCommented:
Too many negatives!

No error message does not mean the function HAS worked!
0
 
ussherAuthor Commented:
ok thanks.  for now i will remove it and see if there are any errors but once it gets to production i dont want clients seeing errors.

im a bit clearer at what im looking at now.

cheers
0
 
Richard QuadlingSenior Software DeveloperCommented:
No.

Wrong way round.

Keep it in and add a test to see if the returned value is the error value. In mysql_query()'s case that would be false.

$ret = @mysql_query($sql);
if (False === $ref)
 {
 // Then something went wrong. Depending upon the statement, you may be able to handle the error or not.
 }
else
 {
 // The query was executed successfully. I would now be checking the mysql_affected_rows() (for update/insert/delete) or mysql_num_rows() (for select) to make sure the query performed as I expected it to.
 }

0
 
ussherAuthor Commented:
ok thanks.  Ill get it printing something

if (False === $ref) why 3 equals signs?  I have seen == before and know what that menas but never 3.  does it have a different meaning?

michael
0
 
ussherAuthor Commented:
sorry. got it
 === identical operator

RTFM

thanks for your help

michael
0
 
Richard QuadlingSenior Software DeveloperCommented:
PHP is loosely typed.

This means that

0 == "0" == False

zero equals in value the string "0" equals in value False.

BUT === means equal in value AND type.

0 !== "0" !== False

0
 
Richard QuadlingSenior Software DeveloperCommented:
And the reason why you use False !== is that you want to ONLY test that the function returned a boolean True.

e.g.

strpos('ABC', 'A')

The answer is 0

But

<?php
if (False == strpos('ABC', 'A'))
 {
 echo 'A not present';
 }
?>

is clearly wrong.


<?php
if (False === strpos('ABC', 'A'))
 {
 echo 'A not present';
 }
?>

is the right way.

0
 
ussherAuthor Commented:
awesome.

im now one step closer to enlightenment. (had to get the manual out and looked up strpos)

thanks

michael

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.