2013-07-29 208 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')"); 

...它没有好处转义字符串后,您必须插入它。不管你使用的是哪个数据库api。

+0

它应该如何?请给我指示方向或代码。提前致谢。 –

+0

更新了使用示例。 – Orangepill

-4

连接mysqli函数。但是你正在使用mysql函数(mysql_real_escape_string。)这是问题所在。如果你想使用mysql_real_escape_string,你可以连接mysql_connect。但我不建议你使用mysql_connect。因为它会在PHP中被弃用。 5.5

+0

不要使用mysql!取消自5.5 –

2

因为您使用的是mysqli_*!所以你需要使用mysqli_real_escape_stringimysql),请参阅文档here

+0

完美答案。我不知道。 –

+0

除了你的逃跑失败...是的。 – Sven

+0

@Sven你是什么意思? – Sliq

相关问题