2016-02-05 122 views
0

我想從PHP獲取mysql數據庫的結果。綁定參數到mysql查詢

我使用的查詢像這樣的:

SELECT * 
FROM images 
WHERE images.name LIKE ? OR images.title LIKE ? 

而且這是我的參數綁定到查詢:

$f_for = "%". $filter_for ."%"; 
$stmt->bind_param('ss', $f_for, $f_for); 

如果我更換questionmarks ?用組成搜索字符串,因此查詢如下所示:

SELECT * 
FROM images 
WHERE images.name LIKE '%searchForThis%' OR images.title LIKE '%searchForThis%' 

並直接執行它(不是PHP,但phpMyAdmin或直接通過終端),我得到一個正確的/積極的結果(即我得到的行,搜索字符串匹配的兩列之一的值)。


使用參數化查詢我沒有得到任何錯誤,但只是一個空的結果(即零行)。我嘗試了不同的字符串格式,但它們似乎都不起作用。

$f_for = "'%". $filter_for ."%'"; 
$f_for = "%{$filter_for}%"; 

如何正確綁定參數?我是否完全錯誤或可能是另一個問題?

+0

您是否檢查過文檔? http://php.net/manual/en/mysqli-stmt.bind-param.php – hdost

+0

我做了,但我找不到任何可能的錯誤... – user5888833

+1

由於'bind_param'通過引用綁定參數,它*可能*如果你使用'pdo',你可以嘗試使用'bind_value()',或者簡單地創建兩個保存相同值的變量,例如: '$ f_for1'和'$ f_for2' – CD001

回答

0

我就要打我的頭靠在我真的對不起每個人...

看着一般日誌,由aynber建議,我發現LIMIT 0, 0在我的查詢結束,所以它會alwa ys返回零行。

我很慚愧,我問了這個問題。

+0

我很喜歡這只是爲了facepalm時刻...我們都去過那裏! :D – CD001

+0

請不要...... – user5888833

+0

我已經解決了很多問題,只是通過記錄查詢!你開始專注於你對其餘部分失明的問題的一部分。 – aynber

1

這是你能做到這一點的一種方法,它涉及少了很多擺弄與$filter_for

$sql = "SELECT * 
     FROM images 
     WHERE images.name LIKE ? OR images.title LIKE ?" 

$stmt = $conn->prepare($sql); 

$param = "%$filter_for%"; 

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

恩,我得到一個致命的錯誤,就像這樣:'致命的錯誤:不能通過參考傳遞參數1' – user5888833

+0

你正在做一個準備在我假設? – RiggsFolly

+0

那有什麼更好的?對不起,我的錯誤,它不會因爲某種原因傳遞非變量 – RiggsFolly

-3

請使用串連這樣

$f_for = "'%".$filter_for."%'"; 
+0

你不需要前導和尾隨單引號 – RiggsFolly

+0

bind_param根據需要添加引號。 – aynber