2013-07-29 4 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 в любом случае, научитесь использовать подготовленные операторы с переменными связывания, тогда вам не нужно беспокоиться об экранировании. –

+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')"); 

Также ... не стоит удалять строку ПОСЛЕ того, как вы ее вставили. независимо от того, какую базу данных вы используете.

+0

Как это должно быть? Пожалуйста, покажите мне направление или код. Заранее спасибо. –

+0

обновлен с примером использования. – Orangepill

-4

Вы подключаетесь к функции mysqli. Но вы используете функцию mysql (mysql_real_escape_string.) В этом и заключается проблема. Вы можете подключиться к mysql_connect, если вы хотите использовать mysql_real_escape_string. Но я не предлагаю вам использовать mysql_connect. Потому что это будет устаревшим в php. 5.5

+0

Не используйте mysql! Непосредственно с 5,5 –

2

Поскольку вы используете mysqli_*! Поэтому вам необходимо использовать mysqli_real_escape_stringi после mysql), см. Документ here.

+0

Идеальный ответ. Я не знал этого. –

+0

Помимо того, что ваш побег терпит неудачу ... да. – Sven

+0

@Sven Что значит? – Sliq

Смежные вопросы