您应该尽量避免在集合类方法之外使用 getSelect。您应该使用集合过滤器而不是 getSelect,如下所示:
$collection = Mage::getModel('partners/userdata')->getCollection();
$collection->addFieldToFilter('userid', $userId);
它将防止 SQL 注入,并用正确的引号包裹值。有很多不同的条件操作可用,都在这里列出 - http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-8-varien-data-collections,“其他比较”部分运营商”。
在您的情况下,您需要使用产品收集和操作'like'
$collection->addFieldToFilter('name', array('like' => 'h%'));
但是产品系列有一个棘手的问题。产品模型实现 EAV 模型,这意味着产品本身就是实体(就 magento 而言),并且它的所有字段都是属性(因此它以特定方式存储并以不同方式处理),因此对于产品集合,您应该使用 addAttributeToFilter,而不是添加字段到过滤器。所以完整的代码看起来像:
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('name', array('like' => 'h%'));
似乎很困惑,因为它与 Magento ORM 实现有关,而我在其他产品/框架中从未见过这样的东西。因此,为简化起见,您始终可以使用 addAttributeToFilter,如果您收到错误提示方法不存在,请将其替换为 addFieldToFilter。
如果您需要一些在核心实现中不可用的条件,或者它经常在您的代码中使用,您可以定义额外的收集方法。