在将函数转换为MySQLi时,我收到“未定义索引”错误

时间:2012-09-02 18:55:37

标签: php mysqli

我正在将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()的{​​{1}}将返回。

$user_data

1 个答案:

答案 0 :(得分:3)

您无法在?中使用prepare作为表名或列名。 See the documentation

相反,创建一个类似

的数组
$valid = array('username', 'password', ...);

然后使用in_array检查输入:

$fields = array();
foreach($func_get_args as $arg) {
    if(in_array($arg, $valid)) $fields[] = $arg;
}
$fields = '`' . implode ('`, `', $fields) . '`';
if($stmt = $mysqli->prepare("SELECT $fields FROM `users` WHERE `user_id` = ?")) {
    // ...