1 Востаннє редагувалося Пам'ять не може бути READ (30.12.2012 15:47:08)

Тема: Неполадки з розширенням mysqli

Привіт.
Пишу я собі значить тихенько срипт, все ніби виходить і тут лажа.
З якогось дива mysqli в деякиї місцях тупо відмовляється працювати.
Помилок ніяких не видає, але і результату жодного теж немає.
Наприклад на головній сторінці всі запити проходять без проблем, а в одному місці тупо нічого не відбувається.
Запит:

$sql = 'SELECT id FROM users WHERE nickname = '.$Value;

Сам код php:

Class UserFunction
 {
     public function checkValid($Input,$Value,$db = null)
     {
     switch($Input)
     {
     #тут великий кусок коду    

        case 'checklogin':
        
         $sql = 'SELECT id FROM users WHERE nickname = '.$Value;
         $result = $db->query($sql);
          if($result->num_rows > 0)
           return 'Введений вами нікнейм уже зайнятий.<br />';
          else
           //return 'ok';
          return 'ok';
        break;

         /*case 'text':
         return 0;
         break;*/
        default:
          return 0;
     }
     }

     
 }

 $User = new UserFunction();

?>

Виклик проходить в іншому файлі:

if($User->checkValid('checklogin',$_POST['nickname'],$db) != 'ok')
       $errorForm = $errorForm.$User->checkValid('checklogin',$_POST['nickname'],$db);

Одним словом, перепробував я дофіга варіантів і ніфіга.
Файл підключення до БД, є включеним у сценарій.

2

Re: Неполадки з розширенням mysqli

1. Гляньте лог помилок. Якщо щось не так скоріше що помилка є =)
2. Спробуйте такий код

print_r($db); // 
if($User->checkValid('checklogin',$_POST['nickname'],$db) != 'ok')

має вивестись ресурс. Якщо не виводиться значить змінна $db не є ресурсом
3. пишіть код простіше і правильніше тоді стане легше знаходити помилки

Re: Неполадки з розширенням mysqli

funivan написав:
print_r($db); // 
if($User->checkValid('checklogin',$_POST['nickname'],$db) != 'ok')

Все ок, $db є ресурсом:

mysqli Object ( [affected_rows] => 0 [client_info] => 5.1.49 [client_version] => 50149 [connect_errno] => 0 [connect_error] => [errno] => 0 [error] => [field_count] => 0 [host_info] => Localhost via UNIX socket [info] => [insert_id] => 0 [server_info] => 5.1.49-3 [server_version] => 50149 [sqlstate] => 00000 [protocol_version] => 10 [thread_id] => 94602583 [warning_count] => 0 )

в лог зараз гляну.

4

Re: Неполадки з розширенням mysqli

 $result = $db->query($sql);
if($result->num_rows > 0)

Спробуйте в цьому куску кода попробувати наперед заданий скл запит і побачите чи він виконюється чи ні але в лог дивіться в першу чергу!

Re: Неполадки з розширенням mysqli

funivan написав:

Спробуйте в цьому куску кода попробувати наперед заданий скл запит і побачите чи він

Не виконується, пробував.

6 Востаннє редагувалося Torbins (30.12.2012 20:02:30)

Re: Неполадки з розширенням mysqli

Можливо воно вас просто від інжекту намагається врятувати? ;)

Re: Неполадки з розширенням mysqli

Torbins написав:

Можливо воно вас просто від інжекту намагається врятувати? ;)

Нарахунок того, що хоче воно врятувати - не знаю, а от побачив завдяки Вам, реальну вразливість.

8 Востаннє редагувалося Пам'ять не може бути READ (30.12.2012 21:28:18)

Re: Неполадки з розширенням mysqli

Ось значить знайшов я проблему.
Вся проблема була у запиті.
Замість

$sql = 'SELECT id FROM users WHERE nickname = '.$Value;

я зробив

$sql = "SELECT id FROM users WHERE nickname = '".$Value."'";

і все запрацювало.

P.S: Torbins, дякую за підказку про вразливість.
P.S.S: Funivan, щодо написання коду - візьму на замітку.

9 Востаннє редагувалося funivan (30.12.2012 21:29:58)

Re: Неполадки з розширенням mysqli

Hanter написав:

Ось значить знайшов я проблему.
Вся проблема була у запиті.
Замість

$sql = 'SELECT id FROM users WHERE nickname = '.$Value;

я зробив

$sql = "SELECT id FROM users WHERE nickname = '".$Value."'";

і все запрацювало.

P.S: Torbins, дякую за підказку про вразливість.
P.S.S: Funivan, щодо написання коду - візьму на замітку.

Вразливість і дальше залишається якщо передати у $Value типу

$Value = '\' or 1 or \'';

Здається так)

Re: Неполадки з розширенням mysqli

funivan, забув сказати, вразливість закрив.
Ще до запиту фільтрую поле, якщо валідне - роблю запит, в іншому випадку виводжу повідомлення про недопустимі символи.

11 Востаннє редагувалося miroslav.chandler (31.12.2012 00:44:13)

Re: Неполадки з розширенням mysqli

Hanter написав:

funivan, забув сказати, вразливість закрив.
Ще до запиту фільтрую поле, якщо валідне - роблю запит, в іншому випадку виводжу повідомлення про недопустимі символи.

mysqli_real_escape_string
читайте котерова, буде вам щастя

12

Re: Неполадки з розширенням mysqli

читайте котерова, буде вам щастя

і юзайте pdo =) ;)

Re: Неполадки з розширенням mysqli

читайте котерова, буде вам щастя

До цього часу php я вивчав по книзі: "Люк Веллинг, Лора Томпсон. Разработка веб-приложений с помощью PHP и Mysql"

і юзайте pdo

А от нарахунок цього - обовязково подивлюся.