簡體   English   中英

PHP PDO mySQL返回null

[英]PHP PDO mySQL return null

以下代碼返回具有相似電話號碼的人。 它可以正常工作,但是當沒有數字時,該函數仍會返回信息,這意味着如果沒有其他人使用相似的數字,則無法選中隱藏某個框。

功能

function getothers($tid,$criteria,$telephone,$telephone2,$elector){
            global $dbh;
            $tid = '-TID'.$tid;
             $sql = "SELECT * FROM electors WHERE ((telephone > 0 AND telephone IN ('$telephone','$telephone2'))  OR (telephone2 > 0 AND telephone2 IN ('$telephone','$telephone2'))) $criteria AND records NOT RLIKE '$tid' AND ID != '$elector'  LIMIT 10";
            $result = $dbh->query($sql);
            return $result;
        }

通話

<?php $others = getothers($post['TID'],$post['criteria'],$elector['telephone'],$elector['telephone2'],$elector['ID']); ?>

無效的線路

<?php if(!$others){?> 

盡管沒有結果,但$others仍然有某些內容。 我認為我可能在y PDO中缺少一行。 有任何想法嗎?

print_r

PDOStatement Object ( [queryString] => SELECT * FROM electors WHERE ((telephone > 0 AND telephone IN ('02085414023 ','')) OR (telephone2 > 0 AND telephone2 IN ('02085414023 ',''))) AND (this_vi_street = '' AND this_vi_telephone = '') AND (mosaic IN ('A01','A02','A03','A04','A05','A07','B11','C15','C16','C17','C18','H46','J52','K57','K58','K60') OR last_vi IN ('C','P')) AND postal_vote != 1 AND records NOT RLIKE '-TID1' AND ID != '13' LIMIT 10 )

根據注釋,使用預准備語句的版本:

function getothers($tid, $criteria, $telephone, $telephone2, $elector) {
    global $dbh;

    $stmt = $dbh->prepare("SELECT *
                             FROM electors
                            WHERE ((telephone > 0 AND telephone IN (:telephone, :telephone2))
                                   OR (telephone2 > 0 AND telephone2 IN (:telephone, :telephone2)))
                                  $criteria
                                  AND records NOT RLIKE :tid
                                  AND ID != :elector
                            LIMIT 10";

    $stmt->execute(array(
        ':telephone'  => $telephone,
        ':telephone2' => $telephone2,
        ':tid'        => '-TID' . $tid,
        ':elector'    => $elector
    ));

    return $stmt->fetchAll();
}

這段代碼中仍然存在一些缺點:

  • 使用global獲取DB連接,這是整體不良的應用程序結構。 您可能應該使用類或將$dbh作為常規參數傳遞給函數。
  • $criteria連接到准備好的語句中。 您是否真的需要如此動態的條件,以至於無法在不將整個SQL塊串聯的情況下為其准備查詢?
  • 不一定解決您的函數返回的實際問題。

也許做類似的事情

$result = $dbh->query($sql);
if($result->rowCount()>0)
{
return $result;
}

return false;

暫無
暫無

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

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