2016-09-16 111 views
-4

我想修复这个错误。我想列在数据库名称是角色并进入会议如何在PHP和PDO中修复此警​​告“非法字符串偏移量”?

$username = $_POST['username']; 
    $password = $_POST['password']; 

    $statment = $con->prepare("select * from users where username = ? and password = ? limit 1"); 
    $statment->execute(array($username,$password)); 
    $count = $statment->rowCount(); 
    $row = $statment->fetchColumn(); 

    if($count > 0) 
    { 
     $_SESSION['username'] = $username; 
     $_SESSION['password'] = $password; 
     $_SESSION['role'] = $row['role']; 

     echo 'User Name : '.$_SESSION['username'].' , Password : '.$_SESSION['password'].' , Role : '.$_SESSION['role']; 
    } 
    else 
    { 
     echo 'Failed To Login'; 
    } 
+2

你也许想发布完整的错误消息,并在你的哪一行上得到它。 – Rizier123

+0

@Antono:不需要它。您可以将绑定值作为数组传递给执行调用。 –

+1

此外,@Antono - 这是一个mysqli_'函数,它与PDO不兼容(请参阅标记+语句中使用的函数)。 – Qirel

回答

1

RTM:http://php.net/manual/en/pdostatement.fetchcolumn.php

这个函数返回一个VALUE,而不是一个数组:

$row = $statment->fetchColumn(); 
    ^---your column, a string 

$_SESSION['role'] = $row['role']; 
         ^^^^^^^^^^---treating your string as an array, with invalid index 
+0

他应该的功能正在使用的是'fetch(PDO :: FETCH_ASSOC)'。 – Barmar

相关问题