如何用 Zend_Db 引用列名?

发布于 2024-12-29 14:48:50 字数 373 浏览 1 评论 0原文

我使用 key 作为 MySQL 表中的列名。

由于这是保留的,因此需要正确转义才能在查询中使用:

… WHERE `key` = 'test'

手动这没有问题,但我正在使用 Zend Framework 并且希望它正确处理转义,如下所示:

$table = new Application_Model_ATable();
$table->fetchRow ( $table->select()->where('key = ?','test') );

所以问题是:

如何使用 Zend_Db_Table 引用/转义列名?

I am using key as a column name in a MySQL table.

Since this is reserved, it needs to be escaped properly to be used in a query:

… WHERE `key` = 'test'

Manually this is no problem, but I am using the Zend Framework and want to have it handle the escape correctly, like this:

$table = new Application_Model_ATable();
$table->fetchRow ( $table->select()->where('key = ?','test') );

So the question is:

How to quote/escape column names with Zend_Db_Table?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

世界和平 2025-01-05 14:48:50

避免使用 Zend_Db 类进行 MySQL 注入

这个人在这里解释了这一点事实上,但我只是很快地拿出报价......

该表达式中需要引用或分隔的任何其他部分
是你的责任。例如,如果您插入任何 PHP 变量
换句话来说,安全是你的责任。如果你有专栏
作为 SQL 关键字的名称,您需要自己用以下命令分隔它们
引用标识符()。示例:

$select->where($db->quoteIdentifier('order').'=?', $myVariable)

希望这有帮助!

avoiding MySQL injections with the Zend_Db class

The guy explains it here actually but ill just pull out the quote quickly...

Any other part of that expression that needs to be quoted or delimited
is your responsibility. E.g., if you interpolate any PHP variables
into the expression, safety is your responsibility. If you have column
names that are SQL keywords, you need to delimit them yourself with
quoteIdentifier(). Example:

$select->where($db->quoteIdentifier('order').'=?', $myVariable)

Hope this helps!!

终陌 2025-01-05 14:48:50

尝试类似的东西:

$table = new Application_Model_ATable();
$where = $table->getAdapter()->quoteInto('key = ?', 'test');
$table->fetchRow ( $where );

*--摘自 Zend_Db_Table 参考--*
注意 SQL 表达式中的值和标识符不会为您加引号。如果你有
需要引用的值或标识符,您负责
做这个。使用 quote()、quoteInto() 和 quoteIdentifier()
数据库适配器的方法。

try something like:

$table = new Application_Model_ATable();
$where = $table->getAdapter()->quoteInto('key = ?', 'test');
$table->fetchRow ( $where );

*--excerpt from Zend_Db_Table reference--*
Note The values and identifiers in the SQL expression are not quoted for you. If you have
values or identifiers that require quoting, you are responsible for
doing this. Use the quote(), quoteInto(), and quoteIdentifier()
methods of the database adapter.

强者自强 2025-01-05 14:48:50

使用大写字母时必须引用列名称。当您计划将来切换数据库适配器时,使用 $db->quoteIdentifier($columnName) 引用这些名称非常有用。

One must quote column names when uppercase letters have been used. It is usefull to quote those names with $db->quoteIdentifier($columnName) when you plan to switch databese adapter in the future.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文