【问题标题】:PHP PDO prepared statementsPHP PDO 准备好的语句
【发布时间】:2010-11-30 05:42:56
【问题描述】:

今天有人告诉我,我真的应该在我的应用程序中使用 PDO 和准备好的语句。虽然我了解这些好处,但我很难理解如何将它们实施到我的工作流程中。除了它使代码更干净这一事实之外,我应该有一个特定的数据库类来容纳我所有准备好的语句,还是应该在每次我想运行查询时创建一个?我发现很难理解什么时候应该使用标准 PDO 查询以及什么时候应该使用准备好的语句。任何示例、提示或教程链接将不胜感激。

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    pdo::prepare() 文档中有两个很好的示例。

    我已将它们包含在此处并进行了一些简化。

    这个使用?参数。 $dbh 基本上是一个 PDO 对象。而您正在做的是将值 150'red' 分别放入第一个和第二个问号。

    /* Execute a prepared statement by passing an array of values */
    $sth = $dbh->prepare('SELECT name, colour, calories
                          FROM fruit
                          WHERE calories < ? AND colour = ?');
    
    $sth->execute(array(150, 'red'));
    
    $red = $sth->fetchAll();
    

    这个使用命名参数,有点复杂。

    /* Execute a prepared statement by passing an array of values */
    $sql = 'SELECT name, colour, calories
            FROM fruit
            WHERE calories < :calories AND colour = :colour';
    
    $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
    $sth->execute(array(':calories' => 150, ':colour' => 'red'));
    
    $red = $sth->fetchAll();
    

    【讨论】:

    • 在你的 2 个例子中,1 比另一个好吗?
    • 对于简单的查询,?很好。但请注意,准备好的语句将在每个值周围添加一个引号。在第二个示例中,您可以声明一个值是数字,另一个值是字符串。 (虽然这里没有显示)
    • 只是取决于你想用它做什么......如果你想多次使用相同的值,那么你应该使用命名参数。这是因为如果您使用 ?,它只是按照它们出现的顺序插入它们。如果您使用了命名参数,那么您可以多次使用它们。 ? 只是用于更简单查询的更精简版本。一个在任何其他方面都不比另一个有优势。
    • 原谅我的无知,但我应该在哪里使用准备好的语句?我应该在某种数据库层中声明它还是可以像上面的示例中那样内联使用它?
    • 在它工作的时候使用它,如果你以后找到更好的方法,那就这样做吧:)
    猜你喜欢
    • 2010-11-05
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多