【问题标题】:PHP PDO Undefined Index [duplicate]PHP PDO未定义索引[重复]
【发布时间】:2013-05-22 08:28:03
【问题描述】:

我浏览了谷歌和其他几个网站,但我不知道为什么这不起作用。

我正在处理 uni 作业,并运行以下代码:

$db = connect();
$testname = 'chunk';
 try {
        $stmt = $db->prepare('SELECT * FROM TreasureHunt.Player WHERE name = ?');
        $stmt->execute(array($testname));
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        $stmt->closeCursor();
        } 
    catch (PDOException $e) { 
    print "Error checking login: " . $e->getMessage(); 
}

$count = $stmt->rowCount();
echo 'Row count: ', $count, '<br>';
var_dump($result);
echo '<br>Result: ', $result['name'], ' pw: ', $result["password"], '<br>';
print_r($result);

但是这会导致以下错误:

Notice: Undefined index: name in /.automount/net/ufiler2/u2/cs3/dbes2376/lib/html/th/index.php on line 30

现在我知道这意味着,在我的 $result 变量中,索引“名称”必须不存在。但这让我感到困惑,因为它确实存在,通过查看: var_dump($result) var_dump($result) 给我:

array(1) { [0]=> array(5) { ["name"]=> string(5) "chunk" ["password"]=> string(7) "truffle" ["pw_salt"]=> string(8) "g#m#g#m#" ["gender"]=> string(1) "m" ["addr"]=> string(10) "Goon Docks" } } 

而 print_r($result) 给了我:

Array ( [0] => Array ( [name] => chunk [password] => truffle [pw_salt] => g#m#g#m# [gender] => m [addr] => Goon Docks ) )

那么为什么我不能将它们称为 $result['name'] 呢?或者我实际上如何引用它?

谢谢。抱歉,这是一个基本问题。

【问题讨论】:

  • var_dump($result) 的输出中可以看出,它是一个数组,其中包含另一个数组。
  • 哇,有很多无法解释的反对票,尤其是对于一个实际上写得很好的问题。投反对票的人,也请发表评论吗?

标签: php postgresql pdo indexing undefined


【解决方案1】:

您的代码中有几个错误。我已经重写了它,希望能删除它们,并让它按预期工作:

$db = connect();
$testname = 'chunk';

try {
    $stmt = $db->prepare('SELECT * FROM TreasureHunt.Player WHERE name = ?');
    $stmt->execute(array($testname));

    foreach($stmt->fetchAll(PDO::FETCH_ASSOC) as $row){
        echo 'Result: ' . $result['name'] . ' pw: ' . $result['password'] . '<br />';
    }
} catch (PDOException $e) { 
    print "Error checking login: " . $e->getMessage(); 
}

$count = $stmt->rowCount();
echo 'Row count: ' . $count .  '<br>';

【讨论】:

  • -1 用于使用异常打印错误...仍然存在许多错误
  • @YourCommonSense 我只添加了异常错误,因为它在原始代码示例中。并不是真正投反对票的理由。
  • @YourCommonSense 啊,刚刚看到最后一个echo的错误,纠正一下,谢谢
  • 这不是错误,而是正确的语法:)
【解决方案2】:

您的代码中有几个错误。我已经重写了它,希望能删除它们,并让它按预期工作。您还必须按照tag wiki

中的说明进行连接
$db = connect();
$testname = 'chunk';
$stmt = $db->prepare('SELECT * FROM TreasureHunt.Player WHERE name = ?');
$stmt->execute(array($testname));
$row = $stmt->fetch();

$count = $stmt->rowCount();
echo 'Row count: ', $count, '<br>';
echo '<br>Result: ', $row['name'], ' pw: ', $row["password"], '<br>';

【讨论】:

    【解决方案3】:

    你应该使用$result[0]['name'];

    【讨论】:

    • 稍微解释一下不会有什么坏处,如果它可以帮助其他有同样问题的用户..
    • 同意,我以后会发布更多信息。
    【解决方案4】:

    fetchAll() 返回一个数组数组。所以在你的情况下访问

    $result[0]['name']
    

    而不是

    $result['name']
    

    另一种选择是只使用fetch(),以便每次只获得一行结果。

    【讨论】:

    • 啊.. 所以它是一个多维数组。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-06-18
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2011-08-06
    • 2018-04-14
    相关资源
    最近更新 更多