2012-07-04 68 views
1

我正在使用PDO bindValue通過我的數據庫搜索術語。我的語法全錯了嗎?我沒有得到我應該的結果PDO +輸入術語+ mysql

$term = $_GET['s']; 
$s_pdo = $dbh->prepare("SELECT * FROM table WHERE value = ':search'"); 
$s_pdo -> bindValue(':search',"%".$term."%",PDO::PARAM_STR); 
$s_pdo -> execute(); 

while($s_row = $s_pdo->fetchAll(PDO::FETCH_ASSOC)){ 
    echo $s_row['value']; 
} 

有沒有人在這裏看到任何錯誤?我在我的mysql中有價值。我完全匹配在mysql中測試我的搜索功能是否工作。

謝謝!

+0

嘗試運行從phpMyAdmin的查詢,看看它是否返回任何行 – shxfee

回答

2

嘗試從bindValue部分刪除%..:

$s_pdo = $dbh->prepare("SELECT * FROM table WHERE value = :search"); 
$s_pdo -> bindValue(':search',$term,PDO::PARAM_STR); 

或使用LIKE這樣你就可以離開%:

$s_pdo = $dbh->prepare("SELECT * FROM table WHERE value LIKE :search"); 
$s_pdo -> bindValue(':search',"%".$term."%",PDO::PARAM_STR); 
1

您不需要引用準備好的佔位符。此外,在使用%term%時,您應該使用LIKE而不是=準備操作可爲您做到!

$term = $_GET['s']; 
$s_pdo = $dbh->prepare("SELECT * FROM table WHERE value LIKE :search"); 
$s_pdo -> bindValue(':search',"%".$term."%",PDO::PARAM_STR); 
$s_pdo -> execute(); 

while($s_row = $s_pdo->fetchAll(PDO::FETCH_ASSOC)){ 
    echo $s_row['value']; 
} 

而且,接下來的時間,更好的錯誤調試,使用PDO::setAttribute()方法使PDO::ERRMODE_EXCEPTION

+0

我把這些引號拿出來,它仍然不會給我我要找的東西。你可以用errmode_exception和setAttribute()來做一個例子,我應該把它們放在fetchAll()中? – hellomello

+0

'$ s_pdo-> setAttribute(「PDO :: ATTR_ERRMODE」,「PDO :: ERRMODE_EXCEPTION」);'在創建新的PDO對象後 –