【问题标题】:How to mysql escape in magento?如何在magento中逃逸mysql?
【发布时间】:2012-06-23 08:54:33
【问题描述】:

我想在 magento 中转义字符串,但是当我使用 mysql_real_escape_string 时,我收到了警告。

警告:mysql_real_escape_string() [function.mysql-real-escape-string]:无法连接到本地 MySQL 服务器通过套接字'/var/lib/mysql/mysql.soc.....'

我找不到任何 magento 的核心 mysql 转义函数。那么,我该怎么办?

【问题讨论】:

标签: mysql magento


【解决方案1】:

使用它来转义查询的字符串并添加周围的单引号:

Mage::getSingleton('core/resource')->getConnection('default_write')->quote($string);

如果需要,您可以查找Varien_Db_Adapter_Pdo_Mysql 以获取更多报价详情。

【讨论】:

  • 谢谢,这个函数很好地转义了字符串。它还在字符串的开头和结尾添加引号。我希望它现在可以工作。
  • 这句话是在字符串的开头和结尾添加引号。然后我测试了没有任何转义功能的magento,也不需要转义字符串。我认为 magento 具有默认的转义功能。我的代码($tbl_customer = getMazeTable("customer_entity"); $connection = Mage::getSingleton('core/resource') ->getConnection('core_read'); $select = $connection->select() ->from($tbl_customer) ->where('email=?',$email);)
  • 是的,您不需要引用$emailZend_Db 会为您处理。您可以在要接受的答案旁边将其标记为已回答。
  • @Vinai 知道是否有任何核心方法可以在不引用的情况下转义字符?例如,我想在searchCriteriaBuilder->addFilter() 调用中使用\ 字符,但需要对其进行转义才能正常工作。我可以看到在核心中使用的唯一转义方法是\Zend_Db_Adapter_Abstract::_quote
【解决方案2】:

我认为 Magento 使用基于 PDO 的 DB Access 层,如果您使用绑定参数,它会自动处理转义。来自Using Magento Methods to write Insert Queries with care for SQL Injection的示例

$write = Mage::getSingleton("core/resource")->getConnection("core_write");

// Concatenated with . for readability
$query = "insert into mage_example "
       . "(name, email, company, description, status, date) values "
       . "(:name, :email, :company, :desc, 0, NOW())";

$binds = array(
    'name'    => "name' or 1=1",
    'email'   => "email",
    'company' => "company",
    'desc'    => "desc",
);
$write->query($query, $binds);

【讨论】:

  • 这是一个完美的例子,说明为什么用链接回答不是一个好主意:链接已关闭。
  • 谢谢你,谢谢你诚实地回答,我应该知道比只用一个链接回答更好。
猜你喜欢
  • 2015-06-10
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多