【问题标题】:Using a variable in php function returning value在php函数中使用变量返回值
【发布时间】:2017-01-23 09:22:17
【问题描述】:

我有一个函数应该根据他的 ID 号给我一个工作人员的名字,所以我的 php 是这样的

$staffId = $_GET['staff_id'];
$staff = staff_load($staffId);

而我的功能是这样的

function staff_load()
{
$dbh = dbh_get(); //connects to database

$sql = 'select user_name from user_staff where user_id = ?';
$stmt = $dbh->prepare($sql);
$stmt->execute();
$staff = $stmt->fetch();

dbh_free($dbh); //disconnects from database
return $staff;
}

但是当我尝试使用 $staff 变量时,它什么也没显示。我无法弄清楚我做错了什么。我尝试了很多变种,除了沮丧之外一无所获。

<td>Book for ' . $staff . '</td>

【问题讨论】:

  • 你的函数定义(function staff_load())需要接受传递给它的值(function staff_load($id)),并在SQL查询中绑定
  • function staff_load() 没有参数,它应该是function staff_load($id) 然后在你的execute() 里面添加execute([$id])
  • 您应该从这段代码中得到错误。查看您的错误日志
  • -&gt;prepare()一个查询,但是你没有绑定参数
  • error reporting 添加到文件顶部测试时在您打开PHP 标记之后,例如&lt;?php error_reporting(E_ALL); ini_set('display_errors', 1); 以查看它是否产生任何结果。跨度>

标签: php postgresql function variables


【解决方案1】:

首先,您忘记在函数定义中包含参数:

function staff_load($id) {

那么你需要绑定prepared statement的参数。

$sql = 'select user_name from user_staff where user_id = $1';
$stmt = $dbh->prepare($sql);
$stmt->execute(array($id));

接下来fetch()返回一个数组,需要从数组中提取user_name元素:

$row = $stmt->fetch();
if ($row) {
    $staff = $row['user_name'];
} else {
    $staff = false;
}

【讨论】:

  • 把函数改成了这个,但仍然没有函数 staff_load($staffId) { $dbh = dbh_get(); $sql = '从 user_staff 中选择 user_name 其中 user_id = :staffId'; $stmt = $dbh->prepare($sql); $stmt->执行(); $stmt->bindParam(':staffId', $staffId); $row = $stmt->fetch(PDO::FETCH_ASSOC); if ($row) { $staff = $row['user_name']; } 其他 { $staff = false; } dbh_free($dbh);返回$员工; }
  • 有错误吗?您是否启用了 PDO 的错误信号?你能确认你使用的是我假设的 PDO 吗?
  • 我认为它是 PDO,因为 $stmt-&gt;fetch() 是该 API 的语法。您使用的是什么 API?
  • 可以不用api写吗?我不是程序员,但在其他功能中没有 pdo。它只是 php 到 postgresql 数据库
  • 这是一个有效的语句 function user_options() { $dbh = dbh_get(); $选项 = ''; $sql = 'select user_id, user_name from user_staff where user_id>7 ORDER BY user_name'; $stmt = $dbh->prepare($sql); $stmt->执行(); while (true) { $r = $stmt->fetch(); if (is_bool($r)) 中断; $options .= ''; } dbh_free($dbh);返回$选项; }
【解决方案2】:

首先你必须将参数传递给staff_load函数

function staff_load($staffId)

其次你应该绑定参数

$sql = 'select user_name from user_staff where user_id = :user_id';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':user_id', $staffId);

【讨论】:

  • user_id 应该等于 $staffId 值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多