我正在尝试使用函数获取用户信息 - user_info .. 但我似乎无法访问connect.php中的pdo变量..
所以我有这些错误..
注意:未定义的变量:第33行的C:\ xampp \ htdocs \ assets \ function.php中的pdo
致命错误:在第33行的C:\ xampp \ htdocs \ assets \ function.php中调用null上的成员函数prepare()
connect.php
<?php
$servername = "localhost";
$username = "root";
$password = "";
try {
//Creating connection for mysql
$pdo = new PDO("mysql:host=$servername;dbname=store", $username, $password);
// set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
function.php
function user_info($user, $field)
{
$query = $pdo->prepare("SELECT $field FROM susers WHERE id=:id");
$query->bindParam("id", $user_id, PDO::PARAM_STR);
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$info=$row[$field];
return $info;
}
}
Display.php的
?php
// Start Session
include('int.php');
// check user login
if(empty($_SESSION['id']))
{
header("Location: notlogged.php");
}
$user = $_SESSION['id']; // get user details
$name=user_info($user, 'fullname');
echo "$name";
?>
int.php
<?php
session_start();
include('assets/function.php');
include('db/connect.php');
?>
答案 0 :(得分:2)
这是范围的常见问题,$ pdo在全局范围内定义。您需要将其传递给您的方法以允许它使用它...
function user_info($user, $field)
...变为
function user_info($pdo, $user, $field)
并且被......打电话。
$name=user_info($pdo, $user, 'fullname');
您可以使用global $pdo;
,但这可能导致各种问题并将变量传入其中被认为是更好的解决方案。
答案 1 :(得分:1)
在您的代码中存在范围问题。在这里学习Variable Scoping。函数内的代码具有局部范围。您的函数public static int biggest(int[][] grid, int big)
{
int total=0;
for (int r = 0,int c = 0; r < grid.length && c < grid[r].length; r++,c++) {
total+=grid[r][c];
}
return total;
}
无法找到$ pdo。为此,您需要在函数参数中传递user_info
。
$pdo
另一种解决方案是将function user_info($user, $field, $pdo)
{
$query = $pdo->prepare("SELECT $field FROM susers WHERE id=:id");
$query->bindParam("id", $user_id, PDO::PARAM_STR);
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$info=$row[$field];
return $info;
}
$name=user_info($user, 'fullname',$pdo);
设为$pdo
global
使用全局关键字
使$ pdo全局化
答案 2 :(得分:0)
在PHP中,默认情况下Global Scope不会像其他语言一样在函数范围内继承。由于您已在全局范围内定义$pdo
,因此默认情况下将无法在函数内使用。
要使其在函数内可用,有两种方法可以在不改变函数签名的情况下完成。
global
关键字(http://php.net/manual/en/language.variables.scope.php)function user_info($user, $field) {
// After this declaration, Global $pdo will be scoped inside this function.
global $pdo;
$query = $pdo->prepare("SELECT $field FROM susers WHERE id=:id");
...
$GLOBALS
(http://php.net/manual/en/reserved.variables.globals.php)function user_info($user, $field) {
// With $GLOBALS, you can use any variable defined in global scope inside your function.
$query = $GLOBALS['pdo']->prepare("SELECT $field FROM susers WHERE id=:id");
...
如果您准备更改功能签名(如果尚未在很多地方使用),您始终可以将全局范围变量作为函数的参数传递,如
function user_info($pdo, $user, $field)
答案 3 :(得分:0)
请在user_info函数中传递$ pdo变量。