[英]PDO select all data from table with “where” clause
我想將$ variable參數傳遞給php函數,並根據此參數從表中獲取數據。 此參數可以為null,這意味着db request應該從表中獲取所有數據,也可以為int值。 這是我嘗試的代碼:
$stmt = $this->_db->prepare("SELECT * FROM ki_cities
WHERE id IS NULL OR id = :user");
$stmt->bindValue(':user',$variable,PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
該查詢不返回任何行。
對於那些對我的問題感到困惑的人來說,這是一個隱含的問題。 我想要SQL查詢:
SELECT * FROM ki_cities WHERE id = *
此查詢應與以下操作相同:
SELECT * FROM ki_cities
我想我的問題很清楚。
=======================================
如果有人感興趣,這是我扭曲的“解決方案”:
$que = "SELECT * FROM ";
$que = $que . " ki_students where season=4";
if($type!=null) { $que = $que . " and type =".$type; }
if($city!=null) { $que = $que . " and city =".$city; }
$stmt = $this->_db->prepare($que);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
如果我理解您的“問題”正確,則代碼可以是:
$stmt = $this->_db->prepare('SELECT * FROM `ki_cities` WHERE ((:user IS NULL) OR (`id` = :user));');
$stmt->bindValue(':user', $variable, is_null($variable) ? PDO::PARAM_NULL : PDO::PARAM_INT);
(或者您可以將參數#3省略為bindValue()並讓PDO自動檢測數據類型)
這里有2種可能的情況:
該語句不返回任何行,因為它意義不大。
也許這是思考這種情況的更好方法
if ( empty($variable) ) {
$stmt = $this->_db->prepare("SELECT * FROM ki_cities");
} else {
$stmt = $this->_db->prepare("SELECT * FROM ki_cities WHERE id = :user");
$stmt->bindValue(':user',$variable,PDO::PARAM_INT);
}
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
對於准備好的語句,您始終必須以“文字”方式生成它們,因此不能避免您使用RiggsFolly描述的過程。 如果需要“最佳”解決方案,則可以通過其他方式詢問變量是否為null。 例如:如該線程所解釋。
希望對您有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.