Php 使用PDO时获取数据时出错?

Php 使用PDO时获取数据时出错?,php,mysql,pdo,Php,Mysql,Pdo,为了在用户使用PDO登录时从数据库获取用户ID,my$stmt未执行,并且我没有获取用户ID。你能找到这个代码中的错误吗 function signin_user($email, $password) { //prepare email address and password hash for safe query $email = $email; $pwdhash = hash("SHA1", $password); //connect to MySQL

为了在用户使用PDO登录时从数据库获取用户ID,my$stmt未执行,并且我没有获取用户ID。你能找到这个代码中的错误吗

function signin_user($email, $password) {
    //prepare email address and password hash for safe query
    $email   = $email;
    $pwdhash = hash("SHA1", $password);

    //connect to MySQL
    try {
        $dsn = 'mysql:host=localhost; dbname=company';

        $dbh = new PDO($dsn, 'root', '');
        echo "connected to database";

        $userid = 0;
        $stmt   = $dbh->prepare("SELECT id FROM company_description(email,password) WHERE VALUES (:email,:password)");
        $stmt->bindvalue(':email', $email);
        $stmt->bindvalue(':password', $pwdhash);
        $stmt->execute()
        foreach ($stmt as $id) {
                $userid=$id['id'];
        }
        echo $userid;

        // close the database connection
        $dbh = null;
        return $userid;
    }
     catch (PDOException $e) {
        //try/catch are like if/else in PDO
        //PDOexception/$e/getMessage() arefunction in PDO's API and they don't die unlike mysql_connect fashion
        echo $e->getMessage();
    }

}
更新 感谢大家花时间解决我的问题。现在它已经解决了,正确的代码如下所示

//connect to MySQL
        $dsn = 'mysql:host=localhost; dbname=company';

        $dbh = new PDO($dsn, 'root', '');

        //PDO error throwing expression, so PDO doesn't die without telling reason
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        //escaping strings and selecting data from database
        $sth = $dbh->prepare('SELECT id FROM company_descriptioin WHERE email=? AND password = ?');
        $sth->execute(array($email, $pwdhash));

        $userid = 0;
        //fetching the data in a assosiative array
        $result = $sth->fetch(PDO::FETCH_ASSOC);
        $userid = $result['id'];

        // close database and return null
        $dbh = null;
        return $userid;

我想你是想插进桌子里

为此,您需要更改查询

    $stmt   = $dbh->prepare("Insert into company_description(email,password) VALUES 
(':email',':password')");
如果我错了,你真的想获取数据,那么你应该这样做

$stmt   = $dbh->prepare("SELECT id,email,password FROM company_description");
        $stmt->query();
注意:-


execute()
用于插入或更新值,而
query()
用于获取数据

您可以这样写:根据


认为您的SQL语法有问题:

$stmt   = $dbh->prepare("SELECT id FROM company_description(email,password) WHERE VALUES (:email,:password)");
致:


您的sql查询具有无效语法,并且您从未在
execute()

试试这个:

function signin_user($email, $password) {
    //connect to MySQL
    try {
        $dsn = 'mysql:host=localhost; dbname=company';

        $dbh = new PDO($dsn, 'root', '');
        echo "connected to database";

        $query = "
                  SELECT id 
                  FROM company_description 
                  WHERE email = :email AND password = :password
                 ";

        $stmt   = $dbh->prepare($query);
        $stmt->bindvalue(':email', $email);
        $stmt->bindvalue(':password', hash("SHA1", $password));
        $stmt->execute()

        if($row = $stmt->fetch()){
            return $row['id'];
        }else{
            return false;
        }

    }
     catch (PDOException $e) {
        echo $e->getMessage();
        return false;
    }

}
用法:

$user_id = singin_user("some@email.com", "somepass");
if($user_id != false){
   echo 'user_id = '.$user_id;
}

你能把收到的错误信息发出去吗?如果有的话,阿什维尼,你还需要帮助吗?我一直在等你的反馈谢谢meda,但我已经解决了问题:)好的,如果我的回答有帮助,你能@Ashvinikumarops!我的声誉分数只有1分,我不能推翻你的答案。
function signin_user($email, $password) {
    //connect to MySQL
    try {
        $dsn = 'mysql:host=localhost; dbname=company';

        $dbh = new PDO($dsn, 'root', '');
        echo "connected to database";

        $query = "
                  SELECT id 
                  FROM company_description 
                  WHERE email = :email AND password = :password
                 ";

        $stmt   = $dbh->prepare($query);
        $stmt->bindvalue(':email', $email);
        $stmt->bindvalue(':password', hash("SHA1", $password));
        $stmt->execute()

        if($row = $stmt->fetch()){
            return $row['id'];
        }else{
            return false;
        }

    }
     catch (PDOException $e) {
        echo $e->getMessage();
        return false;
    }

}
$user_id = singin_user("some@email.com", "somepass");
if($user_id != false){
   echo 'user_id = '.$user_id;
}