我正在尝试创建一个PHP函数,该函数将允许我将MySQL数据库中的user_id转换为用户名(因为我正在处理的分配需要完成很多工作,因此我宁愿只调用一个功能来快速做到这一点,而不是重复自己)
我遇到的问题是我无法将查询返回的值分配给导致未定义变量错误的变量。
该函数是从其他.php脚本中调用的,因此我需要返回该值。调用该函数时,会将user_id作为参数传递。
我已经尝试在查询之前声明变量,并在foreach循环中分配值,但是我无法保存并返回值。
//Convert user_id to Username
function usernameConvert($userid)
{
//Connection to DB
include '../dbconnect.php';
$results = $pdo->prepare('SELECT username FROM users WHERE
user_id="$userid"');
$results -> execute();
foreach ($results as $row)
{
$username = $row["username"];
}
//comes back undefined
return $username;
}
我得到的主要错误是它是一个未定义的变量。
谢谢。
答案 0 :(得分:3)
您不能在单引号'
的字符串中直接使用变量:
$foo = 'bar';
echo "hello $foo"; // hello bar
echo 'hello $foo'; // hello $foo
这将导致查询搜索等于字符串$suserid
的用户ID,因为没有可能的结果,您的foreach
循环运行了0
圈,而$username
是从未定义。
但是使用双引号 "
会使查询vulnerable to SQL injection。您已经在使用准备好的语句,但是使用的是错误的方式。
具有命名参数的有效解决方案:
$results = $pdo->prepare('SELECT username FROM users WHERE user_id = :id');
$results->bindParam(':id', $userid, PDO::PARAM_INT);
$results->execute();
您还忘记使用fetch()
(而不是fetchAll()
,因为您正在基于主键搜索用户名。由于主键是唯一的,因此最多只能获得1行。因此,无需循环):
$results->execute();
$username = $results->fetch();
return $username;