我需要转换这个:
function user_data($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]);
$fields = '`' . implode('`, `', $func_get_args) . '`';
$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM users WHERE user_id = $user_id"));
return $data;
}
}
到此:
function user_data($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]);
$fields = '`' . implode('`, `', $func_get_args) . '`';
$query = $db->prepare("SELECT $fields FROM `admin` WHERE `id` = :user_id");
$query->bindParam(":user_id", $user_id);
$query->execute();
$data = $query->fetch(PDO::FETCH_ASSOC);
print_r ($data);
}
}
问题是我不能让第二点工作。我一直收到这个:
致命错误:对中的非对象调用成员函数prepare()/home/ds4887/public_html/silverjet/v.20/admin/core/functions/main.php在线39
如果你需要任何其他信息,我将非常乐意提供。如果不可能,请告诉我正确的方法。顶部工作,底部需要工作。
提前感谢
$db
未在user_data()
中定义。因此,$db->prepare()
失败并出现错误。
您需要建立PDO连接,并确保user_data()
可以通过以下方式访问$db
:
- 将其作为参数传递(依赖项注入)
- 在
user_data()
内建立连接(效率低下) - 或使用
global
(设计不良)
我猜您在变量作用域方面有问题。您应该将$db
变量传递给函数(首选),或者使用global $db
声明将变量从全局作用域导入函数的作用域。
您以前的函数之所以有效,是因为您使用mysql_query()
的方式有点像黑客,没有指定查询的连接。在这种情况下,默认行为是全局使用最近打开的mysql资源链接,所以它恰好可以工作。
您没有为以下行传递$db的值:
$query = $db->prepare("SELECT $fields FROM `admin` WHERE `id` = :user_id");
$db是连接到数据库时设置的连接资源。您在PDO中需要它,但使用mysql
可以不使用它,因为mysql
假定您建立的最后一个连接。