Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

@mysql_query  and mysql_query whats the difference?

Posted on 2006-07-06
12
Medium Priority
?
396 Views
Last Modified: 2013-12-12
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
Comment
Question by:ussher
[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
  • 6
  • 5
12 Comments
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 17049448
@ 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
 
LVL 40

Accepted Solution

by:
Richard Quadling earned 300 total points
ID: 17049466
@ 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
 
LVL 1

Author Comment

by:ussher
ID: 17049470
so if error reporting is turned off at the server level both statements are exactly the same?
0
Technology Partners: 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!

 
LVL 40

Expert Comment

by:Richard Quadling
ID: 17049487
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
 
LVL 40

Expert Comment

by:Richard Quadling
ID: 17049489
Too many negatives!

No error message does not mean the function HAS worked!
0
 
LVL 1

Author Comment

by:ussher
ID: 17049506
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
 
LVL 40

Expert Comment

by:Richard Quadling
ID: 17049527
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
 
LVL 1

Author Comment

by:ussher
ID: 17049570
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
 
LVL 1

Author Comment

by:ussher
ID: 17049579
sorry. got it
 === identical operator

RTFM

thanks for your help

michael
0
 
LVL 40

Expert Comment

by:Richard Quadling
ID: 17049586
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
 
LVL 40

Expert Comment

by:Richard Quadling
ID: 17049598
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
 
LVL 1

Author Comment

by:ussher
ID: 17049667
awesome.

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

thanks

michael

0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Ready to improve network connectivity? Watch this webinar to learn how SD-WANs and a one-click instant connect tool can boost provisions, deployment, and management of your cloud connection.

Question has a verified solution.

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

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 article discusses four methods for overlaying images in a container on a web page
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to count occurrences of each item in an array.

688 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