2014-09-19 60 views
2

我正在創建一個簡單的mysqli prepared語句,該語句根據搜索從數據庫中選擇記錄。我想使用提交的相同搜索詞搜索數據庫表中的兩個不同列,以找到標題或內容詳細信息中的任何匹配項。我使用Lynda.com上的David Powers視頻跟蹤了面向對象PHP的訪問數據庫,並調整了該教程以適應我的需求。我大部分工作,但是我遇到了一個問題,當我在我的sql語句中添加第二個變量。問題是它沒有返回任何行。 。這裏是我的代碼:LIKE/OR運算符在準備語句中的mysqli select語句中發出

$sql = "SELECT id, heading, details, layout FROM content WHERE (details LIKE ? OR heading LIKE ?)"; 
    $stmt = $db->stmt_init(); 
    if (!$stmt->prepare($sql)) { 
     $error = $stmt->error; 
    } else { 
     $stmt->bind_param('s', $var1, $var2); 
     $var1 = '%' . $_GET['searchterm'] . '%'; 
     $var2 = '%' . $_GET['searchterm'] . '%'; 

如果我在第一個佔位符後的SQL取出一部分,從$ stmt-> bind_param( 'S',$ VAR1,$ VAR2)刪除 「$ VAR2」;那麼查詢工作正常。例如,以下示例返回正確的結果:

$sql = "SELECT id, heading, details, layout FROM content WHERE details LIKE ?"; 
    $stmt = $db->stmt_init(); 
    if (!$stmt->prepare($sql)) { 
     $error = $stmt->error; 
    } else { 
     $stmt->bind_param('s', $var1); 
     $var1 = '%' . $_GET['searchterm'] . '%'; 

一旦我添加第二個變量,就不會返回任何結果。我也曾嘗試以下,但返回0的結果,以及:

$stmt->bind_param('s', $var1, $var1); 
    $var1 = '%' . $_GET['searchterm'] . '%'; 

我是全新的,以準備語句,所以任何建議或指導,將不勝感激。謝謝。

+0

'$ stmt-> bind_param( 'S',$ VAR1,$ VAR2 );'應該是'$ stmt-> bind_param('ss',$ var1,$ var2);'你錯過了's' /參數。 – 2014-09-19 14:35:32

回答

3

雖然我不是很熟悉的參數綁定,你不應該來確定各參數類型,即

$stmt->bind_param('ss', $var1, $var2); 
+0

確實,OP缺少一個論點。 – 2014-09-19 14:36:40

+0

看起來就是這樣。我原本是在那裏的,但後來不斷刪除東西,並重新安排,看看我能否找到錯誤,然後一定忘了更換它,但沒有抓住它。有時需要額外的一雙眼睛。謝謝! – user2762748 2014-09-19 15:12:39