我在这两个函数Bindvalue()BindParam()之间感到困惑

我在php.net上阅读的

  • 不能逃脱%_,因此在使用LIKE时要小心。所以我认为当我们使用LIKE查询时不使用BindValue()
  • 当我们使用LIKE查询时使用BindParam()。因为据我所知,BindParam可以逃避这些%_
  • BindValue()不能防止SQL注入(inject)。我不确定这是真的吗?

  • friend 告诉我我在这三点中提到的是对还是错。
    我是PDO的初学者,所以请清楚解释一下..

    最佳答案

    转义或不转义值的方式应该没有区别。 bindParambindValue的不同之处在于,它引用变量,仅在执行语句时才绑定(bind)值。 bindValue立即获取该值。为了显示:

    $stmt = $db->prepare('SELECT * FROM `table` WHERE foo = :foo');
    
    $foo = 'foo';
    $stmt->bindValue(':foo', $foo);
    $foo = 'bar';
    
    $stmt->execute();
    

    上面的执行类似于SELECT * FROM table WHERE foo = 'foo';
    $stmt = $db->prepare('SELECT * FROM `table` WHERE foo = :foo');
    
    $foo = 'foo';
    $stmt->bindParam(':foo', $foo);
    $foo = 'bar';
    
    $stmt->execute()
    

    上面的执行类似于SELECT * FROM table WHERE foo = 'bar'

    的确,他们都不在乎_%作为特殊字符,因为通常来讲就语法而言它们不是特殊字符,并且数据库驱动程序无法分析上下文以弄清您是不是要把%表示为在LIKE查询的上下文中使用通配符或实际字符“%”。

    两者都可以防止SQL注入(inject)。

    关于php - bindValue()和bindParam()之间的混淆?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14413326/

    10-09 22:01