0

こんにちは私は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はデフォルトでセキュリティを提供していますか?)または私はこれでいくつかの間違いをしています...助けてください

4

3 に答える 3

11

はい、PDOは自動的にデータをエスケープするため、を使用する必要はありませんmysql_real_escape_string。たとえば、ここを参照してください。

于 2012-05-25T07:38:53.617 に答える
4

mysql_real_escape_string以前に呼び出しを介して確立されたアクティブなmysql接続が必要mysql_connectです...したがって、それは機能しません。

とにかくPDOはあなたのためにそれを自動的に行います

于 2012-05-25T07:39:32.717 に答える
2

プリペアドステートメントを使用すると、変数をエスケープする必要はありません。下で使用しているデータベースに応じて、ドライバーが自動的にそれを行います。実際には、自分で逃げてはいけません。これは二重に逃げてしまうからです。

于 2012-05-25T07:39:30.237 に答える