MySQL - перед возвращением результата передайте поле базы данных через функцию PHP - PullRequest
0 голосов
/ 03 апреля 2009

Следующий код из http://php.morva.net/manual/en/mysqli-stmt.bind-result.php показывает, что запрос mysqli готовится и выполняется. цикл while ($ stmt-> fetch ()) выглядит так, как будто он генерирует результирующий ресурс. Могу ли я изменить это, чтобы включить вызов функции, например

while ($stmt->fetch()) {
       foreach($row as $key => $val)
       {
           $c[$key] = performFunction($val);
       }
       $result[] = $c;
   }

Тогда вместо print_r ($ result) я бы вернул ($ result). Таким образом, я могу динамически изменять значение $ val
Оригинальный код =

if ($stmt = $mysqli->prepare("SELECT * FROM sample WHERE t2 LIKE ?")) {
   $tt2 = '%';
     $stmt->bind_param("s", $tt2);
   $stmt->execute();

   $meta = $stmt->result_metadata();
   while ($field = $meta->fetch_field())
   {
       $params[] = &$row[$field->name];
   }

   call_user_func_array(array($stmt, 'bind_result'), $params);

   while ($stmt->fetch()) {
       foreach($row as $key => $val)
       {
           $c[$key] = $val;
       }
       $result[] = $c;
   }
     $stmt->close();
}
$mysqli->close();
print_r($result);

Будет ли это работать, как еще я могу это сделать?
Спасибо всем ...

Ответы [ 2 ]

1 голос
/ 03 апреля 2009

Вы можете использовать UDF (пользовательскую функцию) для обработки данных на стороне MySQL прежде, чем они когда-либо вернутся в PHP.

0 голосов
/ 03 апреля 2009

Это вполне допустимый метод, хотя я подозреваю, что ваш пример кода реализации не совсем сработает. Возможно, вам лучше выбрать объект mysqli_result, вызвать для него fetch_assoc и поместить полученный ассоциативный массив в набор результатов, а не самостоятельно создавать ассоциативный массив.

...