2012-07-06 131 views
1

我發現了這個問題,現在我的插入查詢有效,但我不明白爲什麼。這裏是我當前的工作查詢:mysql查詢中雙引號和單引號的區別是什麼

$add_movie = mysql_query("INSERT INTO ownedmovies VALUES ('', '{$movie_data['Title']}', 
    '{$movie_data['Year']}', '{$movie_data['Rated']}', '{$movie_data['Runtime']}', 
    '{$movie_data['Genre']}', '{$movie_data['Director']}', '{$movie_data['Writer']}', 
    '{$movie_data['Actors']}', \"{$movie_data['Plot']}\", '{$movie_data['imdbRating']}')"); 

請注意,我用周圍的情節場雙引號和周圍一切正常。當我以與其他人相同的方式繪製情節圖時,它不會出錯,但是沒有任何東西會插入表中......現在它完美地工作。

任何人都可以啓發我爲什麼這是?

謝謝

+2

請不要在新代碼中使用'mysql_ *'函數。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。請參閱[**紅框**](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這裏是很好的PDO教程](http://goo.gl/vFWnC)。 – 2012-07-06 21:27:36

+0

你沒有在你的查詢中進行任何錯誤檢查,所以難怪它不會給出錯誤。在這裏看到如何做適當的錯誤檢查。 HTTP://計算器。com/questions/6198104/reference-what-is-a-perfect-code-sample-using-the-mysql-extension – 2012-07-06 21:27:48

+0

[單引號和雙引號字符串在php中的區別](http:// stackoverflow。 com/questions/3446216 /差異之間的單引號和雙引號字符串在PHP) – 2012-07-06 21:28:33

回答

5

我懷疑你的陰謀字符串包含單引號。爲了避免這個問題,你應該使用mysql_real_escape_string來逃避你的字符串值,或者(更好地)使用參數化查詢。

在這種情況下,將單引號更改爲雙引號的「解決方案」可能會起作用,但如果劇情字符串包含雙引號,則它將失敗。

+0

+1這是最合乎邏輯的對行爲的解釋:字符串包含一個不會被轉義的單引號,它引發了關於阻止SQL注入攻擊的通常警告 – spencer7593 2012-07-06 21:47:16

+0

噢,好吧,現在我沒有想到這一點,對於這個愚蠢的錯誤,只是學習php/mysql。而且我會研究上面提到的註釋, 謝謝大家! – 2012-07-06 23:49:54

0

雙人和單引號一起使用,以從混亂查詢結束,其中保留節目。

例如查詢

("Select 'name' From 'contacts'") 

如果你使用的所有雙引號,那麼它看起來像這樣

("Select "name" From "contacts"") 

而且程序可以讓想實際查詢「選擇」

這就是我的想法。

1

在PHP中,雙引號將解析其中的變量,其中的單引號只會是字符串中的單引號。

要將varchar參數傳遞給mysql,它們需要用引號引起來,所以單引號會作爲varchar參數傳遞給mysql。

您的php變量在雙引號內被解析,並且sql字符串將包含您在變量中傳遞它的值。在MySQL查詢中使用了雙引號

1

小心點 - 它們取決於MySQL是在運行SQL模式不同的含義

select "fred" from table 

將從列弗雷德ANSI_QUOTE模式時,返回的值,否則它。將返回文字值fred

相關問題