• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 398
  • Last Modified:

@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
0
ussher
Asked:
ussher
  • 6
  • 5
1 Solution
 
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
 
Richard QuadlingSenior Software DeverloperCommented:
@ 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
 
ussherAuthor Commented:
so if error reporting is turned off at the server level both statements are exactly the same?
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
Richard QuadlingSenior Software DeverloperCommented:
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 DeverloperCommented:
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 DeverloperCommented:
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 DeverloperCommented:
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 DeverloperCommented:
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

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 6
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now