note 89097 added to mysqli-stmt.bind-param

From: Date: Sat, 21 Feb 2009 18:34:08 +0000
Subject: note 89097 added to mysqli-stmt.bind-param
Groups: php.notes 
Request: Send a blank email to php-notes+get-150922@lists.php.net to get a copy of this message
/////////////////////////////// Im sure many of you may want to use this functionality. spent about 3hours writing this, so maybe i can save somone else some time, you can break it up into smaller functions for reuse as you wish. the mysqli stmt bind param (mysqli_stmt_bind_param) function only takes one variable at a time, so its difficult to pass in a few variables to fill in the placeholder space. this allows mysqli prepared statements with variable arguments, one sql template with multiple placeholders to be prepared and excuted. hope this helps somone, Mahees. /////////////////////////////// $uname = 'mahees'; $pass = 'mahees'; $userPassArr = DataAccess::fetch('SELECT * FROM users WHERE username = ? AND password = ?', $uname, $pass); print_r($userPassArr); /* Array ( [0] => Array ( [id] => 1 [username] => mahees [password] => mahees ) ) */ $userPassArr = DataAccess::fetch('SELECT * FROM users'); print_r($userPassArr); /* Array ( [0] => Array ( [id] => 1 [username] => mahees [password] => mahees ) [1] => Array ( [id] => 4 [username] => foo [password] => bar ) [2] => Array ( [id] => 5 [username] => bar [password] => baz ) ) */ //********* function in DataAccess class ********* //im sure this can be written better with more checks...but principle stands static function fetch() { $args = func_get_args(); $sql = array_shift($args); $link = self::establish_db_conn(); if (!$stmt = mysqli_prepare($link, $sql)) { self::close_db_conn(); die('Please check your sql statement : unable to prepare'); } $types = str_repeat('s', count($args)); array_unshift($args, $types); array_unshift($args, $stmt); call_user_func_array('mysqli_stmt_bind_param', $args); mysqli_stmt_execute($stmt); $result = mysqli_stmt_result_metadata($stmt); $fields = array(); while ($field = mysqli_fetch_field($result)) { $name = $field->name; $fields[$name] = &$$name; } array_unshift($fields, $stmt); call_user_func_array('mysqli_stmt_bind_result', $fields); array_shift($fields); $results = array(); while (mysqli_stmt_fetch($stmt)) { $temp = array(); foreach($fields as $key => $val) { $temp[$key] = $val; } array_push($results, $temp); } mysqli_free_result($result); mysqli_stmt_close($stmt); self::close_db_conn(); return $results; } ---- Server IP: 69.147.83.197 Probable Submitter: 72.252.106.15 ---- Manual Page -- http://www.php.net/manual/en/mysqli-stmt.bind-param.php Edit -- https://master.php.net/note/edit/89097 Del: integrated -- https://master.php.net/note/delete/89097/integrated Del: useless -- https://master.php.net/note/delete/89097/useless Del: bad code -- https://master.php.net/note/delete/89097/bad+code Del: spam -- https://master.php.net/note/delete/89097/spam Del: non-english -- https://master.php.net/note/delete/89097/non-english Del: in docs -- https://master.php.net/note/delete/89097/in+docs Del: other reasons-- https://master.php.net/note/delete/89097 Reject -- https://master.php.net/note/reject/89097 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#150922) next »