whats wrong with this php mysql_real_escape_string
- by skyhigh
Hi
Atomic Number
Latin
English
Abbreviation
* check the variables for content */
/*** a list of filters ***/
$filters = array(
'searchtext' => array( 'filter' => FILTER_CALLBACK, 'options'  => 'mysql_real_escape_string'),
'fieldname'  => array( 'filter' => FILTER_CALLBACK, 'options'  => 'mysql_real_escape_string')
);
/*** escape all POST variables ***/
$input = filter_input_array(INPUT_POST, $filters);
/*** check the values are not empty ***/
if(empty($input['fieldname']) || empty($input['searchtext']))
    {
    echo 'Invalid search';
    }
else
    {
    /*** mysql hostname ***/
    $hostname = 'localhost';
    /*** mysql username ***/
    $username = 'username';
    /*** mysql password ***/
    $password = 'password';
    /*** mysql database name ***/
    $dbname = 'periodic_table';
    /*** connect to the database ***/
    $link = @mysql_connect($hostname, $username, $password);
    /*** check if the link is a valid resource ***/
    if(is_resource($link))
        {
        /*** select the database we wish to use ***/
        if(mysql_select_db($dbname, $link) === TRUE)
            {
            /*** sql to SELECT information***/
        $sql = sprintf("SELECT * FROM elements WHERE %s = '%s'", $input['fieldname'], $input['searchtext']);
        /*** echo the sql query ***/
        echo '<h3>'.$sql.'</h3>';
            /*** run the query ***/
            $result = mysql_query($sql);
            /*** check if the result is a valid resource ***/
            if(is_resource($result))
                {
                /*** check if we have more than zero rows ***/
                if(mysql_num_rows($result) !== 0)
                    {
            echo '<table>';
                    while($row=mysql_fetch_array($result))
                        {
                        echo '<tr>
                        <td>'.$row['atomicnumber'].'</td>
                        <td>'.$row['latin'].'</td>
                        <td>'.$row['english'].'</td>
                        <td>'.$row['abbr'].'</td>
                        </tr>';
                        }
            echo '</table>';
                    }
                else
                    {
                    /*** if zero results are found.. ***/
                    echo 'Zero results found';
                    }
                }
            else
                {
                /*** if the resource is not valid ***/
                'No valid resource found';
                }
            }
        /*** if we are unable to select the database show an error ****/
        else
            {
            echo 'Unable to select database '.$dbname;
            }
        /*** close the connection ***/
        mysql_close($link);
        }
    else
        {
        /*** if we fail to connect ***/
        echo 'Unable to connect';
        }
    }
}
else
    {
    echo 'Please Choose An Element';
    }
?
I got this code from phppro.org tutorials site and i tried to run it. It gives 
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established. ....
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO)....
I went to php.net and look it up "Note: A MySQL connection is required before using mysql_real_escape_string() otherwise an error of level E_WARNING is generated, and FALSE  is returned. If link_identifier  isn't defined, the last MySQL connection is used."
My questions are:
1-why they put  single quotation around mysql_real_escape_string ?
2-They should establish a connection first, then use the $filter array statement with mysql_real_escape_string ?