Как мне применить mysqli_free_result ()? - PullRequest
0 голосов
/ 28 марта 2019

Я получаю сообщение об ошибке «Команды не синхронизированы», которое обычно устраняется путем освобождения результата предыдущего запроса, но я не уверен, как применить это к моему сценарию.

Я пытался освободить результаты других запросов в различных местах php-скрипта, но ошибка не устраняется. Примеры, которые я нашел, имеют запрос, отформатированный как $ result = $ mysqli-> query (), а затем освобождают $ result. Я не использую этот стиль результата, но если я должен, я открыт для изменения моего подхода.

      //Check if active checklist table exists and if not create it
      $activeExist = $mysqli->query("CALL TEST('active')");

      while ($row = $activeExist->fetch_row()) {
        echo $row[0];
        error_log($row[0]."\n\n", 3, "/var/tmp/my-errors.log");
        if ($row[0] == "2") {
          //$activeExist->free();
          $sql = "CREATE TABLE IF NOT EXISTS active (
                      id varchar(10) NOT NULL PRIMARY KEY,
                      title varchar(100)) SELECT '$activeID' AS 'id', '$realname' AS 'title';";
          $mysqli->query($sql);
          error_log("Active then statement from dbTableGen ".$sql."\n\n", 3, "/var/tmp/my-errors.log");
          error_log("Active (" . $mysqli->errno . ") " . $mysqli->error ."\n\n", 3, "/var/tmp/my-errors.log");
          //$mysqli->query("INSERT INTO active VALUES ('$activeID', '$realname')");
        }
        else {
          error_log("Active else statement from dbTableGen"."\n\n", 3, "/var/tmp/my-errors.log");
          $mysqli->query("INSERT INTO active VALUES ('$activeID', '$realname')");
        }
      }

  }
  //mysqli_free_result();
  mysqli_close($mysqli);

Ожидаемый результат: создание таблицы с именем «active» и вставка значений, если таблица еще не существует, ИЛИ просто вставка значений, если таблица уже существует.

Фактический результат: команды не синхронизированы; Вы не можете запустить эту команду сейчас

1 Ответ

0 голосов
/ 29 марта 2019

У меня есть проблемы с безопасностью / стабильностью, потому что вы напрямую записываете переменные в свои повторяющиеся запросы, но, как правило, просто кешируете результаты CALLs, запускаете ваши индивидуальные запросы.

Кроме того, вы всегда должны стараться свести к минимумуВсего поездок в базу данных.Я рекомендую выполнять только один запрос INSERT, а не много.

$activeExist = $mysqli->query("CALL TEST('active')");
$call_results = $activeExist->fetch_all(); // or loop if you don't have this driver installed

foreach ($call_results as $row) {
    echo $row[0];
    error_log($row[0] ."\n\n", 3, "/var/tmp/my-errors.log");
    if ($row[0] == "2") {
        //$activeExist->free();
        $sql = "CREATE TABLE IF NOT EXISTS active (
                  id varchar(10) NOT NULL PRIMARY KEY,
                  title varchar(100)) SELECT '$activeID' AS 'id', '$realname' AS 'title';";
        $mysqli->query($sql);
        error_log("Active then statement from dbTableGen " . $sql . "\n\n", 3, "/var/tmp/my-errors.log");
        error_log("Active (" . $mysqli->errno . ") " . $mysqli->error ."\n\n", 3, "/var/tmp/my-errors.log");
        //$mysqli->query("INSERT INTO active VALUES ('$activeID', '$realname')");
    } else {
        error_log("Active else statement from dbTableGen" . "\n\n", 3, "/var/tmp/my-errors.log");
        $mysqli->query("INSERT INTO active VALUES ('$activeID', '$realname')");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...