2010-04-17 29 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)的接口,而不是通用接口。

相关问题