[英]PHP PDO Prepared Statement MySQL Count of Select where X LIKE
使用PHP v.5.2.14和PDO-MySQL擴展。
我是准備好的陳述的新手。 需要創建一個搜索表單(如此用戶輸入)和一個工作查詢“選擇所有X其中X喜歡...”的多樣性。
代碼和結果:
$sql = 'SELECT COUNT(*) as num_books from t_books where title LIKE :search_term';
// Later access as num_books
$prep = $dbh->prepare($sql);
$num = $prep->execute(array(':search_term' => '%'.$search_term. '%'));
$total=$num->fetchColumn();
$ prep的對象轉換:對象(PDOStatement)#2(1){[“queryString”] => string(58)“從t_books中選擇COUNT(*),其中標題LIKE:search_term”}
致命錯誤: 在非對象上調用成員函數fetchColumn()
如果$ prep是一個對象,那么$ num應該是一個對象。 但它是布爾值(true)。 這里發生了什么?
但更重要的是,我該如何計算呢?
我用PDO閱讀行計數 - 。 那些建議對我不起作用,因為我需要准備好的聲明。 會有用戶輸入。
謝謝你的幫助。
PDOStatement::execute()
只返回一個表示成功或失敗的布爾值,因此你的變量$num
不是你想要獲取的。 通過將結果賦值給$num
,您不是分配對象$prep
,而是僅將方法調用的返回值execute()
( TRUE
)。
相反,來自$prep
,您的PDOStatement對象的fetchColumn()
。
$num = $prep->execute(array(':search_term' => '%'.$search_term. '%'));
if ($num) {
$total = $prep->fetchColumn();
}
除此之外,您的SQL應該正確執行,它返回的一列應該包含您需要的計數。
在這種情況下(特別是因為你在沒有參數的情況下調用fetchColumn()
)並不重要,但對於將來的讀者,建議使用別名命名COUNT()
聚合,然后可以在關聯或對象中使用取:
$sql = 'SELECT COUNT(*) AS num_books from t_books where title LIKE :search_term';
// Later access as num_books
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.