如何检查查询是否返回true或false以替换PDO中的mysql_error()

时间:2015-07-31 09:37:59

标签: mysql pdo

我正在创建一个基于Web的应用程序,我正在使用PDO作为我的数据库。我有一个查询,可以从登录表中选择password=something$query = $db->prepare("SELECT * FROM login WHERE username=:username AND password=:password"); $query->bindParam(':username',$username); $query->bindParam(':password',$password); $query->execute();

我的代码:

$query = mysql_query("SELECT * FROM login WHERE username='$username' AND password='$password'  "); 
if($query == false){
    die(mysql_error()); 
}

但是我想检查查询是返回true还是false。例如在mysql中我们常说:

mysql_error()

我的问题是,如何使用PDO检查查询是返回false还是true并给出错误?这将有助于我在开发过程中获取代码错误。

我打算将CREATE TABLE USERS ( USERID VARCHAR2(100 CHAR) PRIMARY KEY ); INSERT INTO USERS (SELECT 'AVROY'||LEVEL FROM DUAL CONNECT BY LEVEL < 10 ); COMMIT; CREATE TABLE logs_UID ( log_dtl VARCHAR2(200 CHAR), UserID VARCHAR2(100 CHAR) ); INSERT INTO logs_UID SELECT 'test avroy'||level,NULL FROM dual CONNECT BY level < 10 ; COMMIT; MERGE INTO LOGS_UID lu USING USERS u ON (UPPER(u.userid) = UPPER(SUBSTR(LU.LOG_DTL,INSTR(UPPER(lu.LOG_DTL),UPPER(u.userid),1),LENGTH(lu.log_dtl)-INSTR(UPPER(lu.LOG_DTL),UPPER(u.userid),1)+1))) WHEN MATCHED THEN UPDATE SET lu.USERID = u.USERID; COMMIT; 替换为什么?

1 个答案:

答案 0 :(得分:1)

我们在异常模式下设置PDO。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

我们用try / catch块包装查询。如果抛出异常,我们就会抓住它。这相当于使用if(!mysql_query($query)) echo mysql_error();

你的例子是

try
{
    $query = $db->prepare("SELECT * FROM login WHERE username=:username AND password=:password");
    $query->bindParam(':username',$username);
    $query->bindParam(':password',$password); 
    $query->execute();

    $result = $query->fetchAll(PDO::FETCH_ASSOC);
}
catch(PDOException $e)
{
    echo "Whoopsie, an error occurred! Message: ". $e->getMessage();
}