MySQLi Динамические Подготовленные Заявления

Я пытаюсь создать динамическую функцию для выполнения запросов MySQL.

Вот как пример обычного запроса:

public function myfunc() {
$name = "ryan";

$stmt = $this->db->prepare("SELECT name, age, id FROM users WHERE name = ?");
$stmt->bind_param( "s", $name );
$stmt->execute();
$stmt->bind_result( $name2, $age, $id );
while( $stmt->fetch() )
$users[] = array( 'name' => $name2, 'age' => $age, 'id' => $id );
$stmt->close();
return $users;
}

Я пытаюсь сделать что-то вроде:

public function query( $myquery, $params, $types, $returns ) {
$stmt = $this->db->prepare( $myquery );
$stmt->bind_param( $types, $params );
$stmt->execute();
$stmt->bind_result( $returns_array );

$i = 0;
while( $stmt->fetch() ) {
$users[] = array( $returns[$i] => $returns_array[$i++], .... );
}
$stmt->close();
return $users;
}

Где я мог бы динамически использовать подготовленные операторы в простой в использовании функции ..

пример вызова этого:

$users = query( "SELECT name, age, id FROM users WHERE name = ?", array('ryan'), "s", array('name','age','id'));

Тогда вы можете легко вызвать данные через:

$users[0]['name']..
$users[0]['age']..
$users[0]['id']..

Я немного запутался в том, как бы это сделать, но есть ли у вас, ребята, какие-нибудь идеи или места, которые я мог бы начать? Код был бы особенно полезен.

Я также нашел эту статью: http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli

Но я не хочу, чтобы это было слишком конкретным для программного обеспечения, установленного в ОС.

Обновление № 2
Мне нужно вернуть ключ -> значение массива из нескольких массивов. Я придумал это, но не могу этого достичь. Я получаю значения идентификатора, а не то, что я просил.

public function query( $query_string, $params = null, $param_types = null) {

//prepare the statement
$stmt = $this->db->prepare($query_string);

//check if the sql query is wrong.
if($stmt === false) {
echo "Wrong SQL: " . $query_string . "<br />Error: " . $this->db->errno . " " . $this->db->error;
}

if($params != null && $param_types != null) {

//build the array that needs to pass the args to bind_param.
$a_params = array();
$a_params[] = &$param_types;

for($i=0; $i<count($params); $i++)
$a_params[] = &$params[$i];

// $stmt->bind_param('s', $param); equivalent
call_user_func_array(array($stmt, 'bind_param'), $a_params);
}

//run the query
$stmt->execute();

//gather column names
$metadata = $stmt->result_metadata();

$field_names = array();
$fields = array();
$results = array();
$i = 0;

// This is the tricky bit dynamically creating an array of variables to use
// to bind the results
while( $field = $metadata->fetch_field() ) {
//for binding the results
$var = $field->name;
$null_v = null;
$fields[$var] = &$null_v;

//for storing the field names
$field_names[$i] = $var;
$i++;
}

// Bind Results
call_user_func_array(array($stmt,'bind_result'),$fields);

//put results into an array
$i = 0;
while ($stmt->fetch()) {

for( $k = 0; $k < count($fields); $k++){

$results[$i][$field_names[$k]] = $fields[$field_names[$k]];
}

$i++;

}

$stmt->close();

return $results;
}

И как я звоню и получаю данные.

$users = $TCS->query("SELECT name, age, id FROM test");

foreach($users as $user) {

echo $user['name'];
}

но он выводит их идентификаторы. (1, 2, 3) где следует выводить их имена (Райан, Стивен и Джон)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector