【问题标题】:PHP/PDO: use simple prepared statement with query return/affected rows?PHP/PDO:使用带有查询返回/受影响行的简单准备语句?
【发布时间】:2011-04-09 06:18:08
【问题描述】:

我是 PDO 对象的新手,找不到任何可以帮助我的文档。假设我有一个简单的代码来删除一行:

$count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'");

这将返回受影响的行,但我将如何使用准备好的语句呢?可以使用$dbh->prepare AND $dbh->exec 或查询!?

【问题讨论】:

    标签: php mysql pdo prepared-statement


    【解决方案1】:

    $dbh->prepare 返回一个PDOStatement 对象。然后调用$stmt->execute 获取结果。

    More info in the PDO manual

    这是手册中的一个示例:

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

    【讨论】:

    • 但是我将如何返回受影响的行数?我可以像在我的示例中那样使用它吗,$count = $stmt-&gt;execute?编辑:其他人回答了。
    【解决方案2】:

    它应该与任何其他语句相同:

    $stmt = $dbh->prepare("DELETE FROM fruit WHERE colour = ?");
    $stmt->execute(array('red'));
    $count = $stmt->rowCount();
    

    PDO Statement rowCount() 应该是您想要做的。

    编辑

    通过添加将返回行数的-&gt;rowCount() 进行修复。语句中的-&gt;execute 将返回booltruefalse,无论查询是否出错。当然,所有这些信息都可以在PDO Statement Manual 上轻松获得

    【讨论】:

    • 所以-&gt;execute 也可以返回受影响的行,这正是我所需要的。谢谢!
    • 不,我之前有一个错误。手册指出-&gt;execute 返回一个布尔值,但查看手册中的其他函数,-&gt;rowCount() 将提供计数。
    • 这将完全适合我的代码,并且最后使用 -&gt;rowCount() 函数更有意义。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2010-12-19
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多