我想創建一個網站的搜索功能,並創建了從PHPMYADMIN生成的SQL代碼,見下文;PHP的PDO和SQL搜索通配符綁定參數
$sql = "SELECT * FROM `bg85ow`.`sessions` WHERE CONVERT(`SessionName` USING utf8) LIKE '%:SessionName1%'";
這裏是處理查詢的PHP代碼;
//bind params
$SessionName1 = filter_input(INPUT_GET, 'search');
$stmt -> bindValue(':SessionName1', $SessionName1, PDO::PARAM_STR);
//execute
$success = $stmt -> execute();
if (!$success){
print $stmt->errorInfo()[2]; //PDO driver error message
}
else{
}
//array
$r = $stmt->fetchAll(PDO::FETCH_ASSOC);
$dbh = null;
if(!$r)
{
echo "No Results";
}
foreach ((array) $r as $row) {
echo $row['SessionId'];
echo $row['SessionName'];
}
出於某種原因,這將不會返回execute
部分工作正常並且傳球成功測試的結果,但那麼一旦它到達陣列沒有返回任何結果。
我檢查了並且$SessionName1
在搜索中有這個詞,所以它被傳遞給查詢。
當我改變%:SessionName1%
到football
這是搜索詞我與測試,代碼返回的結果不錯,但一旦變回:SessionName1
它不會返回結果,即使搜索詞是完全一樣的。
任何人都可以看到我做錯了什麼,我花了很多年看着這個,看不到錯誤。
我到處搜索了一個這個問題的答案,但是我找不到一個針對這個問題的具體問題,我也是一個初學PHP和SQL的人。
可能是你在'$語句輸入錯誤 - > bindValue( ':SessionName1',$ SessionName1,PDO :: PARAM_STR);'...有你'綁定地方SessionName1'代替SESSIONNAME的' '在字符串中...即,這必須是這樣的:'$ stmt - > bindValue(':SessionName',$ SessionName1,PDO :: PARAM_STR);' – Wizard
你必須使用正確的sessionName。 – Monty
[佔位符只能表示一個完整的數據字面量 - 即一個字符串或一個數字。](https://phpdelusions.net/pdo#like) –