gpt4 book ai didi

php - foreach在mysql查询后没有为变量赋值

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:47 24 4
gpt4 key购买 nike

我正在尝试创建一个 PHP 函数,它允许我将 user_id 转换为我的 MySQL 数据库中的用户名(因为我正在处理的任务需要做很多这件事,所以我宁愿只调用功能来快速执行此操作而不是重复我自己)

我遇到的问题是我无法将从查询返回的值分配给导致 undefined variable 错误的变量。

函数是从不同的 .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;
}

我得到的主要错误是它是一个 undefined variable 。

提前致谢。

最佳答案

不能在字符串中直接使用带单引号的变量 ':

$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();

参见 PDOStatement::bindParam() .


您还忘记使用 fetch() (不是 fetchAll(),因为您正在根据主键搜索用户名。由于主键是唯一的,您最多只能获得 1 行。因此,不需要循环):

$results->execute();

$username = $results->fetch();

return $username;

关于php - foreach在mysql查询后没有为变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56349904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com