2013-07-25 123 views
4

當使用下面的代碼而沒有mysql_real_escape_string時,可以正常工作。我只是想抓住一個可能有教徒的文本字符串。從一個輸入表單格式化並放入mysql表格中。警告:mysql_real_escape_string():拒絕用戶'@'localhost'的訪問(使用密碼:NO)

<?php 
    $filenamee = $_FILES["file"]["name"]; 
    $filename =strval($filenamee); 
    echo "file name is".$filename; 

    $con=mysqli_connect("localhost","blasbott_admin","lubu1973","blasbott_upload"); 
    // Check connection 
    if (mysqli_connect_errno()) 
     { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
$companyName = mysql_real_escape_string($_POST['companyName']); 
// $companyName = mysql_real_escape_string($companyNamee); 
//$companyName = mysql_real_escape_string($companyNamee); 

$sql="INSERT INTO ads (companyName, webSite, picture) 
VALUES ('$companyName','$_POST[webSite]','$filename')"; 

if (!mysqli_query($con,$sql)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 
    echo"<br>"; 
echo "1 record added"; 

mysqli_close($con); 
?> 
+0

我看到這種類型的問題所有的時間,你應該閱讀[PHP和MySQL的常見數據庫調試](http://jason.pureconcepts.net/2013/04/common-debugging-php-mysql/)。 –

+9

那些是你實際的數據庫連接細節嗎? – andrewsi

+0

您是否考慮過使用預處理語句,而不是轉義$ _POST數據?您正在嘗試轉義公司名稱,但是您直接在您的查詢中發佈['網站']。 –

回答

6

您面臨着MySQL注入的風險。不要在沒有某種投影的情況下直接將數據插入數據庫。這是一個重大的安全風險。另外使用mysqli_real_escape_string,並注意你的$ _POST [web站點]是不受保護的。

此外,您的錯誤意味着您的數據庫詳細信息不正確。

+0

更改爲mysqli_real_escape_string解決的事情。閱讀mysql注入以保護數據庫。謝謝 – Dennis1973

+0

感謝您將這些安全風險引起我的注意。 mysqli_real_escape_string解決了這個問題,但我不知道有關mysql的注入;謝謝。 – Dennis1973

+0

'mysqli_real_escape_string'是我的修補程序。沒有意識到當我使用mysqli時,我不得不使用它。雖然它使用您打開的連接,但仍然有意義。 – earl3s

9

不,你不應該混用mysql和mysqli。

在這裏使用的,而不是mysql_real_escape_string($var)

$con->real_escape_string($var); 
0

嘗試mysqli_real_escape_string代替。

0

您必須首先使用警告之前,數據庫連接:mysql_real_escape_string()

1

那就是一個解決這個問題一個工作代碼示例,請訪問:

http://www.w3schools.com/php/func_mysqli_real_escape_string.asp

+0

你爲什麼回答這個老問題? – student

+1

我遇到了問題並且遇到了這個線程,因此決定將它留在這裏,以便那些在Google上搜索同樣內容的用戶來到這裏。年齡對於某些問題或多或少是不相關的,這裏的答案並不能以我能理解的方式解決問題。我鏈接的例子是一個更明顯和明確的解決方案。 –

相關問題