我有一个可能非常简单的问题,我无法在 Zend Framework 手册或其他地方找到令人满意的(主观上看到的)答案...
我可以通过多种方式将我的 php 变量移交给我的 sql 查询,以至于我失去了概述,并且可能我对一般引用缺乏一些理解。
$sql = "SELECT this, that
FROM table
WHERE id = ? AND restriction = ?";
$stmt = $this->_db->query($sql, array($myId, $myValue));
$result = $stmt->fetchAll();
我知道使用此解决方案我不需要引用任何内容,因为数据库会为我处理。
$users = new Users();
a) $users->fetchRow('userID = ' . $userID);
b) $users->fetchRow('userID = ' . $users->getAdapter()->quote($userID, 'INTEGER'));
c) $users->fetchRow('userID = ?', $userID);
d) $users->fetchRow('userID = ?', $users->getAdapter()->quote($userID, 'INTEGER'));
我知道 a) 不合适,因为它根本没有被引用。但是其他版本呢,最好的是什么? c) 是否被视为语句并自动引用,或者我是否需要在使用时使用 d)?标识符?
最佳答案
免责声明:此信息自本答案的原始发布日期起有效。 ZF 经常更改,此信息可能会随着 future 的版本而过时,但是,出于存档目的,此信息将保持不变。
如果您将一个字符串传递给 Zend_Db_Table_Abstract 子类的 fetchRow() 方法(您正在做的),它将被视为一个 where Zend_Db_Table_Select 实例的一部分。
换句话说,在内部,Zend_Db_Table 这样做:
if (!($where instanceof Zend_Db_Table_Select)) {
$select = $this->select();
if ($where !== null) {
$this->_where($select, $where);
}
所以...:
a) $users->fetchRow('userID = ' . $userID);
根本没有引用。
b) $users->fetchRow('userID = ' . $users->getAdapter()->quote($userID, 'INTEGER'));
被手动引用为整数。
c) $users->fetchRow('userID = ?', $userID);
由 Zend_Db_Adapter_*::quoteInto() 自动引用
d) $users->fetchRow('userID = ?', $users->getAdapter()->quote($userID, 'INTEGER'));
实际上是双引号,一次被你引用,一次被自动引用。
就“最佳”而言,我推荐选项 C。框架将自动调用参数化值的 quoteInto。
记住:您总是可以将 Zend_Db_Table_Select 或 Zend_Db_Select 的实例传递给 fetchRow()方法代替...
同样,在 Zend_Db_Table_Abstract 的子类中,它看起来像这样:
$this->fetchRow($this->select()->where('userID = ?', $userID));
这样做的好处是,您可以构建更复杂的查询,因为您可以控制很多,而不仅仅是 SQL 查询的 WHERE 子句。理论上,您可以轻松地做到:
$select = $this->select()->where('userID = ?', $userID)
->join(array('sat' => 'superAwesomeTable'), array('sat.user_id = userID', array('superAwesomeColumn'));
$this->fetchRow($select);
注意:如果传递一个 Zend_Db_Select 的实例,fetchRow() 方法的行为与 fetchAll() except 它在内部调用 select 对象的 limit() 方法,参数为 1。
关于php - 我的 Zend Framework 'quoting' 一团糟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1168708/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai