使用PDO PHP的mysql_real_escape_string

时间:2012-05-25 07:36:15

标签: php mysql pdo

您好我是PDO的新手,所以迷惑并得到错误;)使用mysql_real_escape_string ..

任何人都可以提供帮助,这是我的代码

if(!empty($_POST) && isset($_POST)) { 

include ('connection_pdo.php');

$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

$source_url= mysql_real_escape_string($_POST['source_url']);
$class     = mysql_real_escape_string($_POST['class']);
$year      = mysql_real_escape_string($_POST['year']);
$date      = time();
$ip        = $_SERVER['REMOTE_ADDR'];

$insert = $dbh->prepare("
  INSERT IGNORE INTO school_students_images
            ( folder_name,  image_url,  source_url,  class, year , date , ip )
    VALUES  (:folder_name, :image_url, :source_url, :class, :year, :date, :ip)
");

$a=0;
while ($a<1000){
$a++;
$insert->execute(array(
            'folder_name'=> $name->content, //** geting from other source
            'image_url'  => $link[$a], //** geting from other source
            'source_url' => $source_url,
            'class'      => $class ,
            'year'       => $year ,
            'date'       => $date,
            'ip'         => $ip
            ));
}

它没有工作得到错误,但如果我正在使用它 -

    $source_url= ($_POST['source_url']);
    $class     = ($_POST['class']);
    $year      = ($_POST['year']);
    $date      = time();
    $ip        = $_SERVER['REMOTE_ADDR'];

它正在工作......所以我很困惑,没有mysql_real_escape_string进入数据库的POST是否安全? (PDO默认是否提供任何安全性?)或者我在这方面犯了一些错误...... 请帮忙

3 个答案:

答案 0 :(得分:10)

是的,PDO会自动转义您的数据,因此您无需使用mysql_real_escape_string。例如,请参阅here

答案 1 :(得分:4)

mysql_real_escape_string要求之前通过mysql电话进行有效mysql_connect连接...是的,它无效。

PDO无论如何都会自动执行此操作

答案 2 :(得分:2)

使用预处理语句,您不必转义变量。驱动程序将自动为您执行此操作,具体取决于您在下面使用的数据库。实际上你不能自己逃避它,因为这会让它逃脱它。