尝试将数据库上的值与表单中传递的值匹配时,我收到以下错误,以检查用户是否存在。
可捕获的致命错误:PDOStatement类的对象不可能 转换为字符串
这是我正在使用的代码:
//Check users login details
function match_login($username, $password){
//If the button has been clicked get the variables
try{
$dbh = new PDO("mysql:host=localhost;dbname=mjbox","root", "usbw");
} catch( PDOException $e ) {
echo $e->getMessage();
}
$stmt = $dbh->prepare("SELECT * FROM mjbox WHERE username=? AND password=?");
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);
$stmt->execute();
$result = mysql_query($stmt);
if( mysql_num_rows($result) > 0 ){
echo 'There is a match!';
}else{
echo 'nooooo';
}
}
答案 0 :(得分:7)
mysql_query()
和PDO不兼容,不能一起使用。您正在尝试将PDO语句对象传递给期望字符串的mysql_query()
。相反,您希望通过PDO的一个提取方法从$stmt
获取行,或者检查使用rowCount()
返回的行数:
$stmt = $dbh->prepare("SELECT * FROM mjbox WHERE username=? AND password=?");
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);
if ($stmt->execute()) {
// get the rowcount
$numrows = $stmt->rowCount();
if ($numrows > 0) {
// match
// Fetch rows
$rowset = $stmt->fetchAll();
}
else {
// no rows
}
}
答案 1 :(得分:1)
MySQL和PHP5 / PDO在返回行数方面效果不佳。在您的新PDO()之后,发出:
$dbh->setAttribute(PDO::MYSQL_ATTR_FOUND_ROWS, true);
然后发出您的查询...
$stmt = $dbh->prepare("SELECT * FROM mjbox WHERE username=? AND password=?");
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);
$stmt->execute();
// number of rows returned
if($stmt->rowCount()){
// ... matches
}else{
// .. no match
}
否则你的rowCount将是bool 0或null / throw error。