1. PHP / Говнокод #6461

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    //было:
    	function query($sque){
    		$sque = mysql_real_escape_string($sque,$this->hdb);
    		$res = mysql_query($sque,$this->hdb);
    		if(!$res){
    			echo 'Invalid query: '.mysql_error().'; ';
    			return 0;
    		}
    		return $res;
    	}
    //добавил:
    //так как предыдущая функция иногда косячила запрос
    	function sensiblequery($sque,$arr){
    		for($i = 0; $i<count($arr); ++$i){
    			$arr[$i] = mysql_real_escape_string($arr[$i],$this->hdb);
    			$pattern = "/{var$i}/";
    			$sque = preg_replace($pattern, $arr[$i], $sque);	
    		}
    		$res = mysql_query($sque,$this->hdb);
    		if(!$res){
    			echo 'Invalid query: '.mysql_error().'; ';
    			return 0;
    		}
    		return $res;
    	}

    Такое ощущение что написал говно. Если это так подскажите как адекватней сделать...

    Запостил: greshnik, 23 Апреля 2011

    Комментарии (24) RSS

    • > так как предыдущая функция иногда косячила запрос
      > $sque = mysql_real_escape_string($sque,$this->hdb);
      > $res = mysql_query($sque,$this->hdb);

      блин, это ж додуматься надо, эскейпить весь запрос )))
      во второй еще веселее, покалеченный запрос выпрямлять кувалдой регулярками ))))

      маладец.
      Ответить
      • неее, это вторая версия запроса как-бы), то есть запросу передается массив с параметрами которые эскейпятся и ставятся на месте {var0..n} в запрос... Получается что сам запрос не трогаем а экранируем только параметры из массива. Возможно это можно сделать как-то по другому?
        Ответить
    • Если есть echo, то уже говно!
      Ответить
      • пхп без единого echo?
        Ответить
      • Единственная мне известная альтернатива echo это print использовать его в данном случае неуместно.
        Ответить
        • function печать($строка)
          {
          $h = fopen("php://stdout", "r+b");
          fwrite($h, $строка);
          fclose($h);
          }
          Ответить
    • echo 'Invalid query: '.mysql_error().'; ';
      за такое уже пора статью в криминальный кодекс добавлять

      // говно
      Ответить
      • Вот подключил я себе такой быдломодуль на сайт, а он начинает моим пользователям писать что где-то там на сервере неправильный sql запрос. Нафига это пользователям?
        Ответить
        • верно, надо подумать над этим...
          Ответить
        • добровольно-принудительно делаем из юзверей тестеров!
          зато юзер может, жалуясь на баг, указать сообщение, и он будет исправлен быстрее, нежели когда юзер орет, что у него ваша хуйовая система не пашет, и вы довели его до нервного срыва, а обьяснить толком, что он делал перед этим - не в состоянии.
          Ответить
          • Писать в лог, юзеры пуская спят спокойно
            Ответить
            • тег "сарказм" отклеился

              а вообще, дебаг становится сложным в ситуации "у меня все работает - а у меня нет". Все на свете не будешь логгировать, и ремоут дебаг не включишь, и конфигу точно такую же не подберешь.
              Ответить
            • Во во! А SQL-инъекторы не залезут куда не надо! Ненуачё?!
              Ответить

    Добавить комментарий