0

我在 Zend Framework 2 中有一个 sql 查询。它工作得很好,但我忘了转义我的 $sessionId,只是为了保护我的变量,这样没有人可以注入我的 SQL 查询。这是我的 sql 查询:

    SELECT parent.category_name, parent.category_id ,COUNT(product.product_id) AS count, 
    (select count(*) from Categories parent2 
    where parent.category_left > parent2.category_left
    and parent.category_right < parent2.category_right) as level
    FROM Categories parent
    LEFT OUTER JOIN Categories node 
    ON node.category_left BETWEEN parent.category_left AND parent.category_right
    LEFT OUTER JOIN products product
    ON node.category_id = product.product_category_id
    WHERE product.product_shop_id = '.$sessionId.'
    GROUP BY parent.category_name
    ORDER by node.category_left;

我可以在 Zend $select 对象中编写它,使用这个 Zend 会自己逃脱它。有没有办法通过使用这个 sql 查询来 escpae 这个变量?(我也试过mysql_real_escape_string(),但我读过这个函数太旧了,无法使用。

问候 =)

4

1 回答 1

0

有很多方法可以做到这一点。看看这个问题:如何防止 PHP 中的 SQL 注入?

它讨论了至少 4-5 种不同的方法以及它们在 PHP 中转义一般查询的好处。

为了清楚起见,这里的方法并不特定于 Zend Framework.. 但 mysql_real_escape_string 也不是特定的:)

此外,除非您想使用 PDO(这是大多数人推荐的),否则我看不出 mysql_real_escape_string 有任何问题。我不认为在危险中使用它太旧了——只有更现代的方法可以实现同样的目标。

于 2012-08-21T08:32:49.207 回答