2014-08-31 115 views
1

我看過一堆其他線程有相同的錯誤,但是我的看起來有點不同。我已經檢查過丟失的逗號和內容。無法運行查詢:SQLSTATE [42000]:語法錯誤或訪問衝突:1064

這是原來的代碼不工作:

SELECT `color_name`, `dna_sample` FROM `horse_color_base` WHERE `dna_sample` = $dna 

但是,如果你改變$dna"eeee aaaa"(什麼$dna值),它完美的作品。

SELECT `color_name`, `dna_sample` FROM `horse_color_base` WHERE `dna_sample` = 'eeee aaaa' 

驗證錯誤讀取:

無法運行查詢:SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本在1號線

好像它打破了$ DNA變量,它擰一切爲使用近「AAAA」正確的語法手冊。

關於如何使這件事情與變量一起工作的想法或想法?

對於dnadna_sample列,我使用排序規則latin1_general_cs,因爲我需要它們區分大小寫。

+1

該變量未加引號。請參閱[何時使用單引號,雙引號,反引號](http://stackoverflow.com/questions/11321491/when-to-use-single-quotes-double-quotes-and-backticks) – 2014-08-31 01:53:55

+1

要使其工作爲你有它,'$ dna'的值必須_literally_包含引號'$ dna =''eeee aaaa'「;'這是非常罕見的。更常見的是'WHERE dna_sample ='$ dna'' – 2014-08-31 01:54:51

回答

1

像邁克爾Berkowski評論,引用變量:

WHERE `dna_sample` = '$dna' 

編寫一個查詢這種方式是開放的SQL injection。編寫具有綁定參數的查詢幾乎總是更好:

$stmt = $pdo->prepare('SELECT * FROM horse_color_base WHERE dna_sample = :dna'); 
$stmt->execute(array('dna' => $dna)); 
+0

非常感謝這麼多人。每當我想我開始獲得PHP的竅門時,就會發生一些奇怪的事情。幫助有一個偉大的StackOverflow社區! – Chelsea 2014-08-31 11:43:57

相關問題