2016-02-16 35 views
0

我在嘗試從PHP數據庫中獲取某些數據時遇到了一個奇怪的問題。不知道它是否重要,但編碼數據庫,連接和PHP文件都是UTF-8。我的繼承人代碼:使用&符號返回一個字段

$testcode = "Unique12345 & TestName"; 
$sql=" 
    Select 
     dw_test.testID, 
     dw_test.testText 
    From 
     dw_test 
    Where 
     dw_test.testCode = '".$testcode."' 
"; 
if(!$qry = mysqli_query($link, $sql)) reporterror(mysqli_error($link), $sql, $_SERVER['SCRIPT_URL'], __FILE__, __LINE__); 
if(mysqli_num_rows($qry)>0){ 
    $test_array = mysqli_fetch_assoc($qry); 
    $resultTest = $test_array['testID']; 
    $testText = $test_array['testText']; 
}else{ 
    echo "Nothing found"; 
} 

如果我運行使用PHP,它會說「沒有發現」,但如果我運行它使用的是Windows的MySQL工作臺,則返回1條記錄(正確的)。我懷疑它是&符號(&),因爲將查詢改爲其他存在的工作正常。

我試圖逃避&以斜線:

$testcode = str_replace("&","\&",$testcode); 

,我曾嘗試與單和雙引號組合打轉轉,但一切我嘗試產生相同的結果

我在做什麼在我的PHP錯誤?在使用相同查詢時,工作臺工具如何正常工作?

+0

1.使用'mysqli_real_escape_string()'在$ testcode。 2.考慮儘快切換到PDO而不是mysql。 3.「reporterror()」實際上做了什麼? –

+0

reporterror是一個自定義函數,如果發生錯誤,它會通過電子郵件發送給我。 $ testcode作爲循環的一部分通過mysqli_real_escape_string()傳遞,爲簡單起見,我省略了它。該代碼片段適用於$ testcode的其他值,只有當遇到&符號時纔會停止工作。 – kurdtpage

+0

所以你確定你的'mysqli_query()'不會拋出任何錯誤?另外,在你創建腳本後,立即嘗試'echo $ sql',然後在Workbench中嘗試它。 –

回答

1

我解決了! 我在SQL查詢前面添加了這個:

$testcode = str_replace("&","&",$testcode); 

感謝大家的幫助

相關問題