mysql
関数を関数に変更mysqli
していて、興味深い問題に遭遇しました。
特定のユーザー データをエコーアウトしたい。複数の引数 (各引数はデータベース内の列を表す) を挿入する関数を作成し、単純なコード行で必要な列をエコーします。
以下の私のコードは、私が今言ったことが混乱している場合、さらに説明します. それはその全体にあります。
私の問題は、それが機能していないことです。
Notice: Undefined index: last_name in...
コードの最後の行で発生するというエラーが返されますecho $user_data['last_name'];
。
エラーの原因は何ですか? 機能ですか?もしそうなら、どこに問題がありますか?と一緒に仕事をするのは今日が初めてmysqli
です。
$mysqli = new mysqli("localhost", "user", "password", "database");
関数は次のとおりです。
function user_data ($mysqli, $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]);
$fields ='`' . implode ('`, `', $func_get_args) . '`';
//here I am starting the mysqli prepared statement
if ($stmt = $mysqli->prepare("SELECT ? 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();
}
}
}
関数をテストして、機能するかどうかを確認します。
$session_user_id = 1;
$user_data = user_data($mysqli, $session_user_id, 'username', 'password', 'first_name', 'last_name', 'email');
echo $user_data['last_name'];
var_dump()
変数の A$user_data
がこれで返されます。
array(1) { [0]=> array(1) { ["?"]=> string(58) "`username`, `password`, `first_name`,
`last_name`, `email`" } }