Thursday, April 28, 2011

MySQL - pass database field through PHP function before returning result

The following code from http://php.morva.net/manual/en/mysqli-stmt.bind-result.php shows a mysqli query being prepared and executed. while ($stmt->fetch()) loop looks like it is generating the result resource. Can I change this to include a call to a function e.g.

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

Then instead of print_r($result) I would return($result). That way I can dynamically change the value of $val
The original code =

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);

Would this work, how else could I do this?
Thanks all...

From stackoverflow
  • That's a perfectly valid method, although I suspect your sample implementation code won't quite work. You're probably better off fetching a mysqli_result object, calling fetch_assoc on it, and pushing the resulting associative array onto your result set rather making the associative array yourself.

    undefined : Thanks Kalium, you said "pushing the resulting associative array onto your result set"... can you provide some sample code of pushing an assoc array onto a result set. So I would use mysqli_result::fetch_assoc() to get each row? then perform function on row? how do I push row back onto result set?
    undefined : Can I do this using mysql - I have MySQL version 5.0.22. mysqli commands are returning errors - eg "Call to undefined function mysqli_connect()"
    Kalium : That's because you apparently don't have the mysqli extension installed. You can push the associative array into your result set like this: $results[]= $associativeArray;
    undefined : Hi thanks, I tried the following - $result = mysql_query($sql); $result = mysql_fetch_assoc($result); $arraySize = count($result); for ($i=0; $i<$arraySize; $i++) { $result[i]['file_name'] = "TESTING";}; return $result; No joy, AMFPHP output the first row only and file_name had orig value.
  • You could use a UDF (User Defined Function) to process the data on the MySQL side of things before it ever makes it back to PHP.

0 comments:

Post a Comment