Php 使用PDO时获取数据时出错?
为了在用户使用PDO登录时从数据库获取用户ID,my$stmt未执行,并且我没有获取用户ID。你能找到这个代码中的错误吗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
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;
}