簡體   English   中英

PHP PDO准備語句MySQL計數選擇X LIKE

[英]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.

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