

MySQLのuserというテーブルにname, pwといったカラムを作っています。  
以下のPHPを実行するとUndefined index: name  
というエラーが出るのですが、原因がわかりません。  
pwは正しく判定出来ています。

[code]

    $ps=$db->prepare("SELECT pw FROM user WHERE email= :u_mail");
    $ps->bindParam(":u_mail", $m);
    $ps->execute();
    if($ps->rowCount()>0){
       $r=$ps->fetch(PDO::FETCH_ASSOC);
       if($r['pw']===md5($p)){
           $_SESSION['user']=$r['name'];
    
[/code]


CC BY-SA 3.0
2016-06-10T07:39:34.817
26617
2016-11-16T01:23:44.187
2016-11-16T01:23:44.187
15279
question
php mysql
PHP undefined indexというエラー


自己解決しました。  
SELECT pw FROM user WHERE email= :u_mail  
ではなく  
SELECT pw, name FROM user WHERE email= :u_mail  
にすれば大丈夫でした。


CC BY-SA 3.0
2016-06-10T07:52:22.710
26619
2016-06-10T07:52:22.710
15279
26617
answer


初めまして。お力になれるかわかりませんが、現段階で気になったことを書かせていただきます。

Undefined index: name  
は、$r連想配列のキーnameがないことを表示しているものと思います。

[code]

    $ps=$db->prepare("SELECT pw FROM user WHERE email= :u_mail");
    $ps->bindParam(":u_mail", $m);
    $ps->execute();
    if($ps->rowCount()>0){
    $r=$ps->fetch(PDO::FETCH_ASSOC);
    // ここで$rのキーがあるか確認
    print var_export($r);
    
    if($r['pw']===md5($p)){
    $_SESSION['user']=$r['name'];
    
[/code]

printで画面に表示されるかは、実装の仕方によってことなります。  
var_export()の結果を標準出力に表示した際に、  
$ps->fetch(PDO::FETCH_ASSOC);の返り値が判明します。

一度やってみてください。


CC BY-SA 3.0
2016-06-10T07:55:30.097
26621
2016-06-10T07:55:30.097
16809
26617
answer