什麼錯這個PHP mysql_real_escape_string
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'; } } }
其他 { 回聲 '請選擇一個元素'; } ?>
我從phppro.org教程網站得到了這段代碼,我試圖運行它。它給出 警告:mysql_real_escape_string()[function.mysql-real-escape-string]:無法建立到服務器的鏈接。 ... 警告:mysql_real_escape_string()[function.mysql-real-escape-string]:拒絕用戶'ODBC'@'localhost'(使用密碼:否)的訪問....
我去了php.net並查找它「注意:在使用mysql_real_escape_string()之前需要使用MySQL連接,否則會生成級別爲E_WARNING的錯誤,並返回FALSE。如果未定義link_identifier,則使用最後一個MySQL連接。
我的問題是: 1 - 爲什麼他們把單引號mysql_real_escape_string? 2-他們應該先建立一個連接,然後使用$ filter filter語句和mysql_real_escape_string?
SQL注入檢測 – 2010-03-24 22:20:13
@ Col.Shrapnel的內容:不,全filter \ _input \ _array()thingy應該在\ _POST的每個元素上調用real \ _escape \ _string並將結果存儲在$ input中。如果它按預期工作,那麼就不會有sql注入漏洞。 – VolkerK 2010-03-24 22:47:47
@VolkerK那麼是什麼? real_escape_string不是讓你「安全」的魔法。 – 2010-03-24 22:57:29