2010-04-17 62 views
1

這是我第一次。我會欣賞任何想法,提示,以及沒有。我該如何改進?最終,我不希望我的腳本中有這麼多選擇。我不知道應該由MySQL類型的函數組成。任何我應該包括的內容也會很棒,比如mysql_query()。從MySQL中選擇一個函數,我的怎麼樣?

功能mysqlSelectCodes($表, $其中,$順序,$限制){$ SQL = 「SELECT * FROM $table WHERE $where ORDER BY $order LIMIT $limit」 或 模具(mysql_error());

}

回答

2

此代碼WIL實際上不了了之。你只是建立一個查詢字符串,但你不執行查詢。

如果沒有采取其他措施,則此代碼極易發生SQL Injection攻擊。您可能想要閱讀PHP manual for PDO。這會幫助你。

1

這是很好,你要求幫助,請不要讓我說什麼勸阻你 - 繼續努力吧!這有很多問題,所以我只是拋出一些:

  1. 這不會真的做任何事情,因爲它不會返回任何東西(如果$ sql是全球性的,它不應該定)
  2. en.wikipedia.org/wiki/SQL_injection
  3. or die(...)不會在一個字符串生成器,這樣屬於 - 它不會在這裏處理SQL失敗,因爲它所有的測試是,如果給定線成功。
+0

謝謝,所以我猜這是更好的只是有很多硬編碼選擇?我想要清理它。 – Strawberry 2010-04-17 19:57:22

+0

建立一個圖書館,其中包含你的查詢是好的,這不是你在這裏做的。請注意SQL注入攻擊 - 這是你應該做的第一件事。轉到並將您的查詢轉換爲參數化。他們可能會快一點(雖然可能不明顯),更重要的是,他們會更安全 – 2010-04-17 20:00:56

1

我的建議:我可能不會這麼做。除了別人指出的具體問題(SQL注入,忘記返回)之外,我還遇到了一個更大的問題:假設所有查詢都很適合這種形式。您的功能限制包括:

  • 不支持加入多個表。
  • 不支持內部選擇。
  • 您總是選擇使用*的所有列 - 一般來說不好的想法。你不支持只選擇一些列。
  • 不支持GROUP BY
  • 當你想要所有的行時,你仍然必須通過where子句,如'1 = 1'。
  • 等...

現在你可以擴展你的函數,允許這些其他的可能性,但它會變得更加複雜,你會剛剛結束了一個自定義語言,用於創建SQL查詢,但沒有按」不像SQL。有時候創建一個用於訪問SQL數據庫的自定義語言是一個不錯的主意,但通常這只是浪費你的時間,並且會讓別人難以理解你的代碼。儘可能堅持使用標準庫和標準接口。如果您想避免使用SQL,則可以使用Object-Relational Mapping(ORM)進行調查。

如果您希望將SQL保留在代碼之外,請嘗試製作一個實際執行特定於您的應用程序的特定接口(getFriends,getPostsByUser)的接口,而不是通用接口。

相關問題