Функция PHP MySQLi получить данные пользователя не может работать

0

Я использую этот код для отображения записи пользовательских данных, но этот код не работает на моей стороне

Я хочу выделить некоторые пользовательские данные. Я создал функцию, в которую я вставляю несколько аргументов (каждый аргумент представляет столбец в базе данных), а затем эхо, в зависимости от того, какой столбец я хочу с простой строкой кода.

Index.php

    include('function.php');
    $conn = new MySQLi(localhost, root, password, database);
    $user_id = $_SESSION['login_user']; // like 1
    $user = user_data($conn, $user_id, 'login', 'pass', 'nikename', 'email');

    if(empty($user)){
        echo 'error'; // always showing this error
    }else{
        echo $user['nickename'];    
    }

Всегда показывать echo 'error';

function user_data($conn, $user_id){
    $data = array();
    $user_id = (int)$user_id;
    $func_num_args = func_num_args();
    $func_get_args = func_get_args();
    if ($func_num_args > 1) {
        unset($func_get_args[0]);
        unset($func_get_args[1]);

        $valid = array('login', 'pass', 'nikename', 'email');
        $fields = array();
            foreach($func_get_args as $arg) {
                if(in_array($arg, $valid)) $fields[] = $arg;
            }
            $fields = ''' . implode ('', '', $fields) . ''';
            if($stmt = $conn->prepare("SELECT $fields FROM 'users' WHERE 'user_id' = ?")) {
            $stmt->bind_param('si', $fields, $user_id);
            $stmt->execute();
            //here I am trying to convert the result into an array
            $meta = $stmt->result_metadata();
            while ($field = $meta->fetch_field()) {
                $parameters[] = &$row[$field->name];
            }
            call_user_func_array(array($stmt, 'bind_result'), $parameters);
            while ($stmt->fetch()) {
                foreach($row as $key => $val) {
                        $x[$key] = $val;
                }
                $results[] = $x;
            }
            return $results;
            $stmt->close(); 
            }
    }
}
Теги:
function
mysqli

2 ответа

0

Я полагаю, вместо

if($stmt = $conn->prepare("SELECT $fields FROM 'users' WHERE 'user_id' = ?")) {
$stmt->bind_param('si', $fields, $user_id);

вы должны пойти с

if($stmt = $conn->prepare("SELECT $fields FROM 'users' WHERE 'user_id' = ?")) {
$stmt->bind_param('i', $fields, $user_id);

Параметры привязки. Типы: s = строка, я = целое число, d = double, b = blob

Поскольку у вас есть один аргумент с типом INT, вам нужно передать "i" в качестве первых параметров.

Попробуйте отлаживать строку за строкой в этой функции, где вы получите точный недостаток var_dump().

0

Просматривая и анализируя свой код несколько раз, я думаю, что ниже будет решена ваша проблема.

Добавьте это до вашего цикла while/fetch

$row = array();
stmt_bind_assoc($stmt, $row);

поэтому ваш код будет выглядеть следующим образом:

$row = array();
stmt_bind_assoc($stmt, $row);
while ($stmt->fetch()) {
     foreach($row as $key => $val) {
            $x[$key] = $val;
     }
     $results[] = $x;
}

Также убедитесь, что вы прочитали полную документацию bind_param на php.net здесь

Спасибо и всего наилучшего

  • 0
    я уже использую $stmt->bind_param('i', $user_id); но код показывает тот же результат
  • 0
    Когда я использую этот код без функции. так что код работает
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню