2013-07-29 5 views
0

나는 데이터베이스에 디렉토리 내에서 파일 이름을 삽입이 코드는왜 mysql_real_escape_string() 경고가 표시됩니까?

<?php 
include("db.php"); 

$path = 'C:\Users\Firdavs\Desktop\Ypp'; 
$directories = new RecursiveIteratorIterator(
    new ParentIterator(new RecursiveDirectoryIterator($path)), 
    RecursiveIteratorIterator::SELF_FIRST); 

foreach ($directories as $directory) { 
     if($directory->isDir()) 
      { 
      foreach (new DirectoryIterator($directory) as $file) 
       { 
       if($file->isDot()) continue; 
       if($file->isFile()) 
        { 
        $filename=$file->getFilename(); 
         $ext = pathinfo($filename, PATHINFO_EXTENSION); 
         if($ext=='docx') 
         { 
         mysqli_query($con,"INSERT INTO Organ (Name) VALUES ('$filename')"); 
         $filename=mysql_real_escape_string($filename); 
         } 

        } 
       } 

      } 
} 

?> 

이 데이터베이스에 파일 이름을 삽입, 작업 코드 여전히

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user ''@'localhost' (using password: NO) in Y:\home\localhost\www\jurist\import.php on line 22 

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in Y:\home\localhost\www\jurist\import.php on line 22 

그러나 다음과 같은 경고가 표시되어있다;

내 db.php를이 문제가 될 수 무엇

$con= mysqli_connect("localhost","root","mypassword","jurist") or die("Error " . mysqli_error($con)); 

을 따르고있다?

+4

어쨌든 MySQLi를 사용한다면, 바인드 변수와 함께 prepared statement를 사용하는 법을 배우십시오. 따라서 –

+0

을 이스케이프해도 걱정할 필요가 없습니다. mysql_real_escape_string은 msyql_query 앞에 올 필요가 있지만, MySQLi 또는'PDO' –

답변

5

여기에 mysql_ * 및 mysqli_ 함수가 혼합되어 있습니다. $filename=mysql_real_escape_string($filename);.

데이터베이스에 mysql_ 연결이 없으므로이 오류가 발생합니다. 이것은 당신이해야만하는 것입니다.

$filename = mysqli_real_escape_string($con, $filename); 
mysqli_query($con,"INSERT INTO Organ (Name) VALUES ('$filename')"); 

또한 ... 그것을 삽입 한 후 문자열을 벗어나는 것은 좋지 않습니다. 당신이 사용하는 데이터베이스 api에 관계없이.

+0

어떻게해야합니까? 방향 또는 코드를 보여주십시오. 미리 감사드립니다. 사용 예제로 –

+0

가 업데이트되었습니다. – Orangepill

-4

mysqli 기능으로 연결합니다. 하지만 당신은 mysql 함수 (mysql_real_escape_string)를 사용하고 있습니다. 이것이 문제입니다. mysql_real_escape_string을 사용하려면 mysql_connect로 연결할 수있다. 하지만 mysql_connect를 사용할 것을 제안하지는 않습니다. 왜냐하면 그것은 PHP에서 사용되지 않을 것이기 때문입니다. 5.5

+0

mysql을 사용하지 마십시오! Depreacted of of 5.5 –

2

mysqli_*을 사용하고 있기 때문에! 따라서 mysqli_real_escape_string (imysql 이후)을 사용해야하는 경우 here 문서를 참조하십시오.

+0

완벽한 대답. 나는 그것을 몰랐다. –

+0

도망가는 것 외에도 ... 네. – Sven

+0

@Sven 무슨 뜻인가요? – Sliq

관련 문제