几个逻辑编程问题

时间:2010-09-23 15:23:24

标签: php mysql frameworks

我最近开始编码,这个社区帮助我理解了许多我不知道的事情。然而,许多知名编码员指示我一些模式,我必须编码的方式以及我不应该编写代码的方式。虽然我感激地接受了他们的建议,但有很多事我无法理解。

我希望你的观点能够理解过去几天我脑海里浮现的几个问题。

的MySQL

  1. 为什么每当我在select语句中使用*时,许多程序员都会向我大拇指?为什么他们建议使用entityname.tablename,即使有时我想要几乎所有表中的数据?

  2. 如果我的代码在一个页面上频繁访问数据库,说是5-8个请求,这样可以吗?为了在页面中更精确,我想要更新值,插入值,计算行数,总结值,等等。

    我曾将几乎所有的select语句作为单个查询,并且该社区的一位知名用户建议我不要这样做,而是建议我使用用户定义的函数。 (顺便说一句,用户定义的函数帮助我清理了我的代码并更快地理解了错误)。你对此有何看法?

  3. 框架

    当我开始学习PHP时,我对编程知之甚少,对网络更多了解,尽管我在大学里学过流行的计算机语言,如C,C ++,.NET,Java等。这只是我学到的正式和理论主题,当我知道我想成为一名网络开发者时,互联网是我最好的朋友,社区帮助了我。

    现在,当我开始学习编程之旅时,我已经设定了一些目标和目标,我想成为一名Pro PHP开发人员,我想掌握HTML,JS,CSS,MySQL等。我的问题是< / p>

    对于像我这样的学习者而言,框架是否真的存在?

5 个答案:

答案 0 :(得分:7)

  

的MySQL

使用*很好。当你开始变得非常复杂的MySQL查询 - 加入和比较表 - 那么你想看看使用entityname.tablename只是为了避免让自己感到困惑。

下一个问题太主观了。这取决于您的服务器和脚本的效率。这还取决于将使用该脚本的人数。显然,与任何事情一样,你使用它越少越好。如果你可以做一个sql查询而不是5个,那么这样做,但如果你只有几百人查看你的博客,那么我不会太担心。它与功能相同。显然,将所有内容都放入功能中要好得多。这有助于长期运行,因为您只需在一个位置编辑脚本即可进行更改。让我们这样说 - 如果你正在复制和粘贴代码,那么你应该使用函数。但是如果你的脚本只有1个文件,200行长,那么如果你不想,我也不会担心。

  

框架

框架很难衡量其有用性。显然,学习像Zend或Mage这样的东西是强大的框架,可以帮助您创建更高效​​,更复杂的Web项目。但是,对于学习者来说,这可能会使您感到困惑。我绝对不会试着去学习它们,直到你完全了解PHP。希望你会有足够的理解,如果遇到这些问题你就不会有问题。如果你学习了一个框架,你会错过语言的要点。例如 - 如果你只学习jquery,你就不会学习javascript。你会学到一点,但你永远不会完全理解它。

这是我的看法,但这是一个非常主观的问题。

答案 1 :(得分:3)

不喜欢在SQL中选择all的不良参数:http://www.joelango.com/2007/04/30/why-you-should-never-use-select-star/

关于查询次数:这是性能问题。经验法则是优化性能实际上何时成为问题。如果您运行的网站每分钟处理数千个请求,您可能需要开始担心。否则,它只是没有区别。

关于框架:如果你想在其基础上学习PHP,那么现在就避免使用框架。否则,如果你真的想跳进去完成任务,那么从框架开始应该没问题。例如,我不了解JavaScript本身,但我可以使用JQuery(JavaScript库/框架)。

答案 2 :(得分:2)

像Thomas Clayson所说的那样使用*对于简单查询很好,但是当你有复杂的连接语句时,你应该指定字段并给表命名(比如someTable作为a)并使用a.someField来组织你的查询。

在学习特定语言时,框架只是帮助开发人员在更短的时间内完成工作的工具(包括维护,最糟糕的事情)但如果你是初学者,那么你真正应该学习的是什么编程范式的语言支持(面向对象,程序或功能)和焦点或学习这些范例和语言的特定命令,因为例如,如果你preffer面向对象类将始终是类,函数和过程将始终具有相同的squelet但每种语言的实现都不同,所以如果你学习这种范式,那么学习任何语言都会很容易。

我的拙见希望会有所帮助,问候

答案 3 :(得分:1)

虽然我同意Thomas re:框架,但我不得不反对或至少扩展他对MySQL的看法。

虽然技术上没有任何错误,但在大多数情况下,在SELECT请求中使用*时,扩展列名会使语句更容易理解,并且可以为代码中的其他开发人员提供更多自我文档。他们可以查看查询并查看行对象应具有的属性。除此之外,*在查询期间稍微效率较低。除非你只需要一小部分可用的列,否则没什么可担心的。

至于多个查询,取决于。如果为特定项运行10 SELECT比为多个项运行1 SELECT并解析它们更快,则运行10 SELECT。运行多个小而快的查询比一个大而慢的查询要好得多。显然,每个应用程序都会有所不同。

答案 4 :(得分:1)

  1. 在SELECT语句中使用*:虽然它是完全有效的语法,但由于两个原因,通常建议使用它。一,速度;二:代码质量。使用*时,您要求(和获取)哪些行以及以哪种顺序不明显;如果数据库已更改并添加了行,那么您也会获得这些行,如果行的顺序发生更改,则结果将非常意外。 如果指定所需的行,则会产生更安全,更快速的代码。
  2. 话虽这么说,你仍然可以使用*以方便和一些测试。 但是对于生产代码,请考虑指定行。

    1. 使用SQL语句进行单独的DB调用会大大减慢处理速度,因为必须发送,接收,编译和解释其中的每一个,结果都会被发回 - 只是为了在另一个调用中再次接收它们。 存储过程(或“用户定义的函数”)更有效,并且对于像注入这样的攻击也更安全。如果您可以在不牺牲灵活性或其他方面的情况下制作它们,请执行此操作。 但是,当你仍然找到自己的方式时,不要这样做 - 过早的优化是万恶之源,He说。

    2. 框架非常有用,但对于学习者/初学者来说确实不是一个好主意。它们会引导您跳过您应该学习的内容的重要部分并限制您的思考。要判断框架的优点和缺点,选择框架并克服它们的缺陷,首先应该掌握基础知识。

    3. 所以学习你的基础知识,一旦掌握了它们,你就可以开始使用框架了。