آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

متد safequery در کلاس Db

مسعود  7 سال پیش  7 سال پیش
+1 0

شاید من 4 بار ویدیوی مربوط به امنیت آموزشها رو نگاه کردم. ولی هنوز متوجه نشدم که دقیقا کار اون علامت & که اول پارامتر sql$ استفاده میشه چی هست. اگه از دوستان کسی هست که بلده یه توضیح کوچولو بده. منظورم اون قسمته که کوئری ها رو پاس میدیم متد safequery انجام میده. چرا وقتی & نمیزاریم کوئری تغییر نمیکنه و مقادیر جایگزین نمیشن؟

private function safeQuery( & $sql, $data){
    foreach ($data as $key=>$value){
      $value = $this->connection->real_escape_string($value);
      $value = "'$value'";

      $sql = str_replace(":$key", $value, $sql);
    }

    return $this->connection->query($sql);
  }

 برای این سوال 2 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
مسعود  7 سال پیش
+1 0

دوستان من خودم گشتم جواب سوالمو پیدا کردم ولی از اونجایی که نمیدونم چجوری باید  این سوالو پاک کنم که برای بقیه قابل رویت نباشه سوالم تو این قسمت موند. یعنی راهی وجود نداره که سوالاتمون رو پاک کنیم؟

+1 0
پاسخ سوال رو قرار بدید تا بقیه هم استفاده کنن. (7 سال پیش)
پاسخ به سوال 
مسعود  7 سال پیش
+1 0

 پاسخ صحیح

اول این مثال رو بخونید تا راحت تر درک کنید:

function add(&$num) { $num++; }

$number = 0;
add($number);
echo $number; // this output => "1"

همونطور که میبینید مقداری توسط فانکشن برگشت داده نشده ولی مقدار متغیر عوض شده و این بخاطر اینه که
به جای ارسال مقدار متغیر به فانکشن آدرس متغیر ارسال میشه و در نتیجه مقدار متغیری که
در بیرون تابع هست هم تغییر میکنه

که اگه بخوام تو کدهای پروژه هم توضیح بدم اینطور میشه که برای مثال چون در متد safequery مقدار تغییر یافته متغیر sql$ به متدی که safequery رو صدا زده برگشت داده نمیشه، و فقط نتیجه کوئری ریترن میشه ، پس اگه نتیجه کوئری false باشه وبه متد صدا زننده safequery ارسال بشه، اگر ورودی تابع safequery به صورت پوینتری نباشه مقدار متغیر sql$ در متد صدازننده تغییر نخواهد کرد و کوئری به همون شکل تغییر نیافته در پیغام خطا ظاهر خواهد شد.یه تیکه از کد پروژه رو پایین میندازم که ببینید و راحتتر درک کنید.(امیدوارم منظور رو رسونده باشم)

private function safeQuery( & $sql, $data){
    foreach ($data as $key=>$value){
      $value = $this->connection->real_escape_string($value);
      $value = "'$value'";

      $sql = str_replace(":$key", $value, $sql);
    }

    return $this->connection->query($sql); // dar in ghesmat meghdare $sql return nashode ke dar peyghame khata meghdare taghir karde nemayesh dade beshe
  }

public function query($sql, $data = array()){
    $result = $this->safeQuery($sql, $data);
    if (!$result) {
      echo "Query: " . $sql . " failed due to " . mysqli_error($this->connection);
      exit;
    }
    $records = array();
    if ($result->num_rows == 0) {
      return null;
    }
    while($row = $result->fetch_assoc()) {
      $records[] = $row;
    }
    return $records;
  }

+1 0
مثال خیلی جالبی بود ممنون متوجه شدم. (7 سال پیش)
+1 0
خواهش میکنم آقای عباسی عزیز (7 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .