За последние 24 часа нас посетили 17579 программистов и 1605 роботов. Сейчас ищут 940 программистов ...

$conn->query второй раз не исполняется как надо

Тема в разделе "PHP и базы данных", создана пользователем bogachev, 20 фев 2012.

  1. bogachev

    bogachev Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте!

    В коде представленном ниже при выполнении мне выводиться сигнал об ошибке - у меня это "AAAA WHY?????" Собственно вопрос, почему? Почему второй раз коннекшн не выполняет запрос. Я могу привести код процедур если это важно, однако они выполняются в mysql (в оболочке HeidiSQL 7) на ура с точно такими же параметрами и синтаксисом, что я передаю ниже. Уже полтора часа бьюсь.

    Подскажите, пожалуйста, что не так.

    Код (PHP):
    1. function TryCheckLoginPassword($loginKey, $passwordKey)
    2.     {
    3.         $conn = Connect();
    4.         $user = $conn->real_escape_string($loginKey);
    5.         $password = $conn->real_escape_string($passwordKey);
    6.         
    7.         $conn->select_db('test');
    8.         $query = 'call USERS_GET_USER_ID(\''.$user.'\',\''.$password.'\')';
    9.         
    10.         if (!($q_result = $conn->query($query))) /*returns "id"*/
    11.         {
    12.             $conn->Close;
    13.             return false;
    14.         }
    15.         
    16.         $row = $q_result->fetch_array();
    17.         
    18.         if ($row === NULL)
    19.         {
    20.             $conn->Close;
    21.             return false;
    22.         }
    23.         
    24.         $ret['UserID'] = $row['id'];
    25.         $ret['UserName'] = $user;
    26.         $rights = array();
    27.         
    28.         $query2 = 'call USERS_GET_USER_RIGHTS(' . $ret['UserID'] . ')';
    29.  
    30.         if (!($q_result2 = $conn->query($query2))) /*returns "rightname, rightvalue"*/
    31.         {
    32.             $conn->Close;
    33.             echo "AAAA WHY?????";
    34.             return false;
    35.         }
    36.         
    37.         while (($row2 = $q_result2->fetch_array()) != NULL)
    38.         {
    39.             $rights[] = array($row2['rightname'], $row2['rightvalue']);
    40.         }
    41.         
    42.         $ret['Rights'] = $rights;
    43.         $conn->Close;
    44.     
    45.         return $ret;
    46.     } 
     
  2. avkey

    avkey Активный пользователь

    С нами с:
    20 фев 2012
    Сообщения:
    9
    Симпатии:
    0
    Что тебе выдает, если после $ret['UserID'] = $row['id'];
    прописать var_dump($ret['UserID'])
    ?
     
  3. bogachev

    bogachev Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Привет!

    Задачу уже решил так:

    Код (PHP):
    1.     function TryCheckLoginPassword($loginKey, $passwordKey)
    2.     {
    3.         $conn = Connect();
    4.         $user = $conn->real_escape_string($loginKey);
    5.         $password = $conn->real_escape_string($passwordKey);
    6.         
    7.         $conn->select_db('test');
    8.         
    9.         
    10.         if ($stmt = $conn->prepare("call USERS_GET_USER_ID(?,?)")) { 
    11.           $stmt->bind_param('ss', $user, $password); 
    12.           $stmt->execute(); 
    13.           $stmt->store_result();
    14.           $stmt->bind_result($Result);
    15.           while ($stmt->fetch()) { 
    16.             $ret['UserID'] = $Result;
    17.             $ret['UserName'] = $user;
    18.           }    
    19.           $stmt->free_result();
    20.           $stmt->close(); 
    21.           while ($conn->next_result()) {} 
    22.         }
    23.         $rights = array();
    24.         if ($stmt = $conn->prepare("call USERS_GET_USER_RIGHTS(?)")) { 
    25.           $stmt->bind_param('i', $ret['UserID']); 
    26.           $stmt->execute(); 
    27.           $stmt->store_result();
    28.           $stmt->bind_result($rightname0, $rightvalue0);
    29.           while ($stmt->fetch()) { 
    30.             $rights[] = array($rightname0, $rightvalue0);
    31.           }    
    32.           $stmt->free_result();
    33.           $stmt->close(); 
    34.           while ($conn->next_result()) {} 
    35.         }
    36.         $ret['Rights'] = $rights;
    37.         $conn->close();
    38.         
    39.         return $ret;
    40.     }
    41.  
    Насколько понял, если бы были простые запросы - не хранимые процедуры - то в первом посте все нормально сработало бы.