簡體   English   中英

PDOStatement PHP MSSQL選擇是否結果?

[英]PDOStatement PHP MSSQL Select if result?

我對此很艱難,如果我的select語句找到一條記錄,嘗試返回1或true。 由於其安全性,我正在使用MSSQL Server和帶有PDO的PHP。 我知道fetchColumn()不是使用正確的語句,但是那是我放棄的地方,因為我嘗試了幾乎所有其他方法。

這是我的代碼。

public function activate($email, $email_code) {
        $query = $this->db->prepare("SELECT * FROM users WHERE (email = ? AND email_code = ? AND confirmed = ?)");

        $query->bindValue(1, $email);
        $query->bindValue(2, $email_code);
        $query->bindValue(3, 0);

        try{

            $query->execute();
            $rows = $query->fetchColumn();// HERE I AM NOT SURE WHAT TO USE ??? HELP!
            if($rows == 1){


                $query_2 = $this->db->prepare("UPDATE users SET confirmed =? WHERE email = ?");
                $query_2->bindValue(1, 1);
                $query_2->bindValue(2, $email);             

                $query_2->execute();
                return true;

            }else{
                return false;
            }

        } 
            catch(PDOException $e){
            die($e->getMessage());
        }

    }

當前代碼的問題(除了在參數占位符周圍使用引號之外)是fetchColumn()您提供結果集中第一列的值,該值可能是某種id,並且該值不等於1。這就是為什么總是假的。

您可以通過使用rowCount()而不是fetchColumn()

$rows = $query->rowCount();

現在,要檢查是否存在一行,您實際上不需要檢索所有列的結果集。 只需使用COUNT(*) 它將返回僅包含一列的一行,您fetchColumn()通過fetchColumn()獲得該列的值

嘗試改變

$query = $this->db->prepare("SELECT * FROM users WHERE (email = ? AND email_code = ? AND confirmed = ?)");

$query = $this->db->prepare("SELECT COUNT(*) FROM users WHERE (email = ? AND email_code = ? AND confirmed = ?)");

if($rows == 1){

(為了安全起見,如果出於某些原因重復)

if($rows > 0) {

更新

由於rowCount()返回受UPDATE影響的行數,因此函數的簡潔性可能如下所示

public function activate($email, $email_code) {
    $sql = 'UPDATE users 
              SET confirmed = 1 
            WHERE email = ?
              AND email_code = ?
              AND confirmed = 0';

    $rows = 0;

    try{
        $query = $this->db->prepare($sql);

        $query->bindValue(1, $email);
        $query->bindValue(2, $email_code);

        $query->execute();
        $rows = $query->rowCount();
        $query = null;
    } catch(PDOException $e) {
        die($e->getMessage());
    }
    return ($rows > 0);
}

注意 :對於confirmed列,您不需要綁定諸如01類的靜態值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM