PHP 数据库 PDO 连接

Posted

技术标签:

【中文标题】PHP 数据库 PDO 连接【英文标题】:PHP Databases PDO connections 【发布时间】:2013-05-14 19:55:54 【问题描述】:

大家好,我对 php 中的 PDO 有点麻烦,因为它返回的错误是未定义的索引。函数和查询返回结果的代码是这样的:

function getUserDetails($user) 
   $db = connect();
try 
    $stmt = $db->prepare('SELECT name,addr AS address,team
FROM TreasureHunt.Player LEFT OUTER JOIN TreasureHunt.MemberOf ON (name=player) 
LEFT OUTER JOIN TreasureHunt.PlayerStats USING (player)
WHERE name=:user');

    $stmt->bindValue(':user', $user, PDO::PARAM_STR);

    $stmt->execute();
    $results = $stmt->fetchAll();
    $stmt->closeCursor();

 catch (PDOException $e)  
    print "Error : " . $e->getMessage(); 
    die();

return $results;  

但是,在运行索引页面的代码时,我收到一条错误消息:Notice: Undefined index: name

索引的代码是这样的:

try 
$details = getUserDetails($_SESSION['player']);
echo '<h2>Name</h2> ',$details['name'];
echo '<h2>Address</h2>',$details['address'];
echo '<h2>Current team</h2>',$details['team'];
echo '<h2>Hunts played</h2> ',$details['nhunts'];
echo '<h2>Badges</h2>';
foreach($details['badges'] as $badge) 
    echo '<span class="badge" title="',$badge['desc'],'">',$badge['name'],'</span><br />';

 catch (Exception $e) 
echo 'Cannot get user details';

我的问题是它为什么会发出通知,我该如何解决这个问题?

【问题讨论】:

$db = connect(); 是做什么的?你如何与db连接?错误的内容是什么?你放的细节太少了 检查您使用var_dump($details); 获得的内容。 注意: 在 echo 语句中 concat 与 .(dot) 而不是 , 可能会抛出通知,因为没有正确的结果,并且在循环中您使用可能未分配的$details['badges'] 等。正如@Rikesh 建议使用 var_dump 或 print_r($details) 并显示结果。 @Rikesh ,echo 语句中更可取,它使您可以将几个参数传递给echo,这些参数会按顺序回显。这比连接字符串然后 echo 将它们输出更有效。 @deceze - 我从来不知道。谢谢:) 【参考方案1】:

fetchAll 在一个多维数组中返回所有个结果(可能是多行):

array(
    0 => array(/* first row */),
    1 => array(/* second row */),
    ...
)

这就是为什么数组没有直接索引'name',它必须是[0]['name']。 或者你不应该fetchAll,只是fetch

【讨论】:

以上是关于PHP 数据库 PDO 连接的主要内容,如果未能解决你的问题,请参考以下文章

不要通过 PDO 连接 oracle 数据库和 PHP

PHP pdo单例模式连接数据库

PHP使用pdo连接access数据库并循环显示数据操作示例

php pdo对象使用详解: 连接数据库与exec方法

php中使用mysqli和pdo扩展,测试连接mysql数据库的效率。

使用PDO连接数据库