2015-11-30 28 views
0

我有一個名稱通常包含撇號的山脈數據庫,例如, Beinn A'Chroin。我的所有搜索條件都能正常工作,除非用戶通過帶有撇號的表單(即Beinn A'Chroin)輸入搜索內容,然後拋出一個錯誤 - Beinn A將起作用,Chroin將起作用,但從未使用撇號。由於大多數用戶都會不約而同地插入適當的名稱,包括撇號我總是喜歡有它在表中的數據 - 您的幫助表示讚賞 - 感謝約翰SQL - 當用戶輸入搜索條件包含撇號時,數據庫搜索會出錯

我的代碼相對部分是:

$srch = $_POST['srch']; 


// Prepare query 

// Named Mountain Search Search for: 



if ($srch != '') { //Options for specific walk types in a specific area selected 

    $query = "SELECT walk, status, distance, report, dateofwalk FROM walkslist WHERE walk LIKE '%$srch%' ORDER BY walk ASC;"; 
+0

嘗試用兩個撇號替換用戶的撇號。不確定的MySQL,但一些SQL服務器處理撇號的方式 – Sparky

回答

0

更新您的代碼使用PDO

try { 
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); 

    $sql = 'SELECT walk, status, distance, report, dateofwalk 
FROM walkslist WHERE walk LIKE ? ORDER BY walk ASC;'; 

    $q = $conn->prepare($sql); 
    $q->execute(array('%$srch%')); 
    $q->setFetchMode(PDO::FETCH_ASSOC); 

    while ($r = $q->fetch()) { 

    } 
} catch (PDOException $pe) { 
    die("Could not connect to the database $dbname :" . $pe->getMessage()); 
} 
+0

嗨Rahautos感謝您的回覆,但是當我使用轉義字符串,因爲你建議我得到以下錯誤: – JMH

+0

嗨Rahautos感謝您的答覆,但是當我測試轉義字符串,因爲你建議我得到以下錯誤: - 不推薦使用:mysql_real_escape_string():mysql擴展已被棄用,將來會被刪除:使用mysqli或PDO代替C:\ wamp \ www \ Walkslog \ dbwalks \ srchforA .php在線46 任何建議 - 謝謝約翰 調用堆棧 – JMH

+0

檢查我的更新回答@JMH –