sql не в состоянии выполнить через mysqli_multi_query - PullRequest
0 голосов
/ 04 июня 2018

Я новичок в использовании mysqli_multi_query и не проводил много времени в php.Мой sql успешно выполняется, когда я применяю его непосредственно в моем клиенте db (phpMyAdmin), но он не выполняется из моего кода php.Предполагается, что возврат из этой функции будет двухэлементным массивом, заполненным результатами 2 операторов SELECT, но он всегда возвращается пустым.(Примечание: соединение установлено успешно; $ con определен в другом месте.)

function claimItem($key){
    //remove expiry, decrement quantity available, send Kate & Sasha an email.
    global $con;
    $sql = "SELECT A.name, B.name, C.quantity, B.id FROM invitees A, items B, invitees_items C WHERE C.activation_key = '$key' AND C.items_id = B.id AND C.invitees_id = A.id; SELECT @qnt := quantity, @itm := items_id FROM invitees_items WHERE `activation_key` = '$key'; UPDATE items SET num_available = GREATEST(num_available - @qnt, 0) WHERE id = @itm; UPDATE invitees_items SET expiry = null, activation_key = null WHERE activation_key = '$key';";

    $multiArr = array(array(), array());

    if (mysqli_multi_query($con,$sql)){
      $qcount = 0;
      do
        {
        // Store first result set
        $result=mysqli_store_result($con);
          // Fetch one and one row
          while ($row=mysqli_fetch_row($result))
            {
                array_push($multiArr[$qcount], $row);
            }
          // Free result set
          mysqli_free_result($result);

          $qcount++;
        }
      while (mysqli_next_result($con));
    }
    else {
        return "failure";
    }

    mysqli_close($con); 
    return $multiArr;
}

1 Ответ

0 голосов
/ 04 июня 2018

Существуют некоторые проблемы с именами переменных.

Есть переменная $multiArr, которая инициализируется, но на нее не ссылаются до конца, где она возвращается.Это объясняет, почему возвращается пустой массив.(Существует другая переменная с именем $multiArray, на которую ссылаются в теле функции).

Существует также переменная $qcount, которая инициализируется и на нее ссылаются.Но эта переменная не увеличивается.Вместо этого увеличивается другая переменная с именем $count.


Я бы порекомендовал возвести это в квадрат, прежде чем объявить, что есть проблема с mysqli_multi_query.

Код выглядит так:использовать шаблон, известный как уязвимый для SQL-инъекций.И использование mysqli_multi_query широко раскрыто для гнусных подвигов.

...