رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آیا این تابع برای sql injection خوبه
#1
سلام و عرض ادب و احترام 
حال شما 
خوب هستین 
به این کد من یه نگاه بندازین .
این کد عمل Insert رو با pdo انجام میده .
من خونده بودم که اگه از pdo استفاده کنم . جلوی حملات sql injection گرفته میشه .
آیا من تو کد زیر تونستم این کار رو به خوبی انجام بدم ؟
به نظرتون کدم مشکلی داره ؟

public function insert($table,$data){

   $this->setAttribute(pdo::ATTR_EMULATE_PREPARES,false);

ksort($data);

$keyfild='`'.implode('`,`',array_keys($data)).'`';

$valfild=':'.implode(',:',array_keys($data));

$res=$this->prepare("INSERT INTO `$table` ($keyfild) VALUES ($valfild)");



foreach($data as $key=>$val){

$res->bindValue(":$key",$val);

}

$rr=$res->execute();

if($rr){

session::set('insert',true_matn); 

}else{

session::set('insert',false_matn);

   }
}
پاسخ
تشکر شده توسط:
#2
بله این مشکل sql injection نداره. ولی به جای اینکه خودتون کد دسترسی به دیتـابیس بنویسید و بهش شک داشته باشید ازGithub.com کتابخونه های آماده دسترسی به دیتابیس دانلود کنید
پاسخ
تشکر شده توسط:
#3
باید برای مقادیر از array_values استفاده کنید. ضمناً یکم مرتب‌تر بنویسید و سعی‌کنید ثابت‌ها رو با حروف بزرگ بنویسید (یه‌جور قرارداد نانوشته است بین برنامه‌نویس‌ها) Ywink

public function insert($table, $data)
{
    $this->setAttribute(pdo::ATTR_EMULATE_PREPARES, false);
    ksort($data);
    $keyField = '`' . implode('`,`', array_keys($data)) . '`';
    $valField = ':' . implode(',:', array_values($data));
    $res = $this->prepare("INSERT INTO `{$table}` ({$keyField}) VALUES ({$valField});");
    foreach($data as $key => $val) {
        $res->bindValue(":{$key}", $val);
    }
    session::set('insert', $res->execute() ? TRUE_MESSAGE : FALSE_MESSAGE); 
}
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان