获取非法字符串偏移' uid'

时间:2017-08-22 14:03:47

标签: php sql

请不要标记为DUPLICATE。我知道有很多帖子都有这些错误,但似乎没有一个与我的问题相同。

我要做的是根据/日期的uid / date提取数据。 UID与登录会话相关,其中它表示用户的ID。

这是我的HTML代码,

<input type="text" readonly name="uid" id="uid" value="<?php echo $_SESSION['myusername']; ?>" />
<input type="date" name="from" id="from" value="<?=$date['from']; ?>" />
<input type="date" name="to" id="to" value="<?=$date['to']; ?>" />
<input type="submit" value="Submit" />

因此,从上面的代码中,UID是只读的,用户只能选择日期。因此,默认情况下,用户只能使用不同的日期集从自己的UID获取数据。

这是我的SQL代码,

if($date['from'] !== NULL && $date['to'] !== NULL){
    // get table data
    $sql = 'SELECT `id`, `changeid`, `implemented_by`
    FROM `tracker` WHERE `implemented_by` = $uid `scheduled_start_date` BETWEEN :d1 AND :d2';
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':uid', $uid['uid'], PDO::PARAM_STR);
    $stmt->bindParam(':d1', $date['from'], PDO::PARAM_STR);
    $stmt->bindParam(':d2', $date['to'], PDO::PARAM_STR);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

现在,每次我点击提交按钮检索数据时我都会收到此错误,

Warning: Illegal string offset 'uid' in C:\*\update_status_test.php on line 130

Fatal error: Only variables can be passed by reference in C:\*\update_status_test.php on line 130

第130行指的是

$stmt->bindParam(':uid', $uid['uid'], PDO::PARAM_STR);

任何人都可以帮助我理解为什么会出现这样的错误,我是PHP的新手并且似乎无法理解错误。

2 个答案:

答案 0 :(得分:0)

因为你这样做:

git pull

你可以改变这个

$uid = $_POST['uid'];

进入这个

$stmt->bindParam(':uid', $uid['uid'], PDO::PARAM_STR);

答案 1 :(得分:0)

固定代码:

// get table data
// Fixes are in query text
// 1. replace $uid with :uid placeholder
// 2. add `AND` between conditions
$sql = 'SELECT `id`, `changeid`, `implemented_by`
FROM `tracker` WHERE `implemented_by` = :uid AND `scheduled_start_date` BETWEEN :d1 AND :d2';
$stmt = $conn->prepare($sql);
// as `$uid` is a simple string - pass it as is:
$stmt->bindParam(':uid', $uid, PDO::PARAM_STR);
$stmt->bindParam(':d1', $date['from'], PDO::PARAM_STR);
$stmt->bindParam(':d2', $date['to'], PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);