MySQL - передать поле базы данных через функцию PHP перед возвратом результата

Следующий код из http://php.morva.net/manual/en/mysqli-stmt.bind-result.php показывает подготовку и выполнение запроса mysqli. в то время как цикл ($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);

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


person undefined    schedule 03.04.2009    source источник


Ответы (2)


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

person KOGI    schedule 03.04.2009

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

person Kalium    schedule 03.04.2009
comment
Спасибо, Калиум, вы сказали, что вставляете результирующий ассоциативный массив в ваш результирующий набор... можете ли вы предоставить пример кода для вставки ассоциативного массива в результирующий набор. Итак, я бы использовал mysqli_result::fetch_assoc() для получения каждой строки? затем выполнить функцию в строке? как вернуть строку в набор результатов? - person undefined; 03.04.2009
comment
Могу ли я сделать это с помощью mysql - у меня версия MySQL 5.0.22. Команды mysqli возвращают ошибки - например, вызов неопределенной функции mysqli_connect() - person undefined; 03.04.2009
comment
Это потому, что у вас явно не установлено расширение mysqli. Вы можете поместить ассоциативный массив в результирующий набор следующим образом: $results[]= $associativeArray; - person Kalium; 03.04.2009
comment
Привет, спасибо, я попробовал следующее: $result = mysql_query($sql); $ результат = mysql_fetch_assoc ($ результат); $arraySize = количество($результат); for ($i=0; $i‹$arraySize; $i++) { $result[i]['file_name'] = TESTING;}; вернуть $результат; Без радости, AMFPHP выводит только первую строку, а имя_файла имеет исходное значение. - person undefined; 06.04.2009