Die vorbereitete mysqli select-Anweisung im Langtextfeld wird wieder leer

Ich habe eine Datenbankabfragefunktion, die gut funktioniert - außer dass ich auf ein anscheinend bekanntes Problem mit von mysqli vorbereiteten Anweisungen und Langtextfeldern stoße. Was passiert ist, dass das Langtextfeld immer leer bleibt, obwohl die Abfrage über phpMyAdmin funktioniert. Gemäßhttp://www.workinginboxershorts.com/php-mysqli-returns-empty-variables-from-longtext-columnWenn Sie den Datentyp in Text ändern, wird das Problem behoben. In meinem Fall würde ich es jedoch vorziehen, das Feld so lange zu belassen, wie ich es mir vorstellen kann, wenn dieser zusätzliche Platz wertvoll wäre.

Ich verwende parametrisierte Abfragen, was offensichtlich das Problem ist. Hier ist meine Funktion:

<code>// Bind results to an array
// $stmt = sql query, $out = array to be returned
function stmt_bind_assoc (&$stmt, &$out) {
  $data = mysqli_stmt_result_metadata($stmt);
  $fields = array();
  $out = array();

  $fields[0] = $stmt;
  $count = 1;

  while($field = mysqli_fetch_field($data)) {
    $fields[$count] = &$out[$field->name];
    $count++;
  }    
call_user_func_array('mysqli_stmt_bind_result', $fields);
}

// DB Query
// $query = SQL query, $params = array of parameters, $rs = whether or not a resultset is expected, $newid = whether or not to retrieve the new ID value;
// $onedimensionkey = key required to convert array into simple one dimensional array
function db_query($query, $params, $rs = true, $newid = false, $onedimensionkey = false) {
  $link = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
  if (!$link) { 
    print 'Error connecting to MySQL Server. Errorcode: ' . mysqli_connect_error(); 
    exit; 
  }

  // Prepare the query and split the parameters array into bound values
  if ($sql_stmt = mysqli_prepare($link, $query)) {
    if ($params) {
      $types = '';
      $new_params = array();
      $params_ref = array();
      // Split the params array into types string and parameters sub-array
      foreach ($params as $param) {
        $types .= $param['type'];
        $new_params[] = $param['value'];
      }
      // Cycle the new parameters array to make it an array by reference
      foreach ($new_params as $key => $parameter) {
        $params_ref[] = &$new_params[$key];
      }
      call_user_func_array('mysqli_stmt_bind_param', array_merge(array($sql_stmt, $types), $params_ref));
    }
  }
  else {
    print 'Error: ' . mysqli_error($link);
    exit();
  }

  // Execute the query
  mysqli_stmt_execute($sql_stmt);

  // If there are results to retrive, do so
  if ($rs) {
    $results = array();
    $rows = array();
    $row = array();
    stmt_bind_assoc($sql_stmt, $results);
    while (mysqli_stmt_fetch($sql_stmt)) {
      foreach ($results as $key => $value) {
        $row[$key] = $value;
      }
      $rows[] = $row;
    }
    if ($onedimensionkey) {
      $i = 0;
      foreach ($rows as $row) {
        $simplearray[$i] = $row[$onedimensionkey];
        $i++;
      }
      return $simplearray;
    }
    else {
      return $rows;
    }
  }
  // If there are no results but we need the new ID, return it
  elseif ($newid) {
    return mysqli_insert_id($link);
  }

  // Close objects
  mysqli_stmt_close($sql_stmt);
  mysqli_close($link);
}
</code>

Laut dem Link, den ich gepostet habe, gibt es eine Problemumgehung, die die Reihenfolge betrifft, in der die Dinge erledigt werden, aber entweder behandle ich meine Anfrage auf eine ganz andere Weise als im Beispiel oder ich verstehe einfach etwas Wichtiges nicht.

Vielen Dank an alle, die helfen können!

BEARBEITEN: Dank Corinas Antwort habe ich das gelöst - für alle anderen, die auf das Problem stoßen, müssen Sie nach dem Befehl mysql_stmt_execute einfach Folgendes hinzufügen:

<code>// Execute the query
mysqli_stmt_execute($sql_stmt);

// Store results
mysqli_stmt_store_result($sql_stmt);
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage