php - 使用准备好的 PDO 语句

标签 php html mysql sql pdo

我正在使用 PDO 准备语句、MySQL 数据库运行查询。当我运行查询时,我还没有找到一种方法来了解受影响的行数(如果有的话),我尝试了 rowCount() 但仍然无济于事。

$stmt1 = $db->prepare("SELECT * FROM publications WHERE pub_journal = '$j' AND pub_issue = 'CURRENT'");
$stmt1->execute();

如何找到受影响的行数?

最佳答案

如果您的数据库是 MySQL,

rowCount 应该可以工作。它对您不起作用的事实表明您的查询可能失败,或者它没有返回您期望的行数。

PDO documentation建议使用以下方法查找行数:

For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO::query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement::fetchColumn() to retrieve the number of rows that will be returned.

这应该与准备好的语句以及 PDO::query() 一起工作。

您可以修改原始 SQL 以用作模板,以便它可以使用 COUNT(*)*(或者更好的是,一个列表您需要的特定列)。

$sql = "SELECT %s FROM publications WHERE pub_journal = ? AND pub_issue = 'CURRENT'";

注意 SQL 中的 ?。这是一个占位符,当使用 execute([$j]); 执行语句时,$j 变量将绑定(bind)到该占位符。当您将变量连接到 SQL 字符串中时(如 ...WHERE pub_journal = '$j'...),您实际上并没有从准备好的语句中获得太多好处。

有了这个,您可以准备并执行您的计数查询:

$count_stmt = $db->prepare(sprintf($sql, 'COUNT(*)'));
$count_stmt->execute([$j]);

然后获取计数:

$count = $count_stmt->fetchColumn();

在你对计数做了任何你需要做的事情之后,你可以通过指定你想要的列而不是 COUNT(*) 来执行实际的 SELECT 查询。

$select_stmt = $db->prepare(sprintf($sql, '*'));
$select_stmt->execute([$j]);

关于php - 使用准备好的 PDO 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39106959/

相关文章:

使用 LDAP 进行 PHP 身份验证

javascript - 检查动态选择的单选按钮

html - 如何以流体比例在父div中水平堆叠三个div并单独定位每个子div?

mysql:计算每组中值的数量

php - 提交一个或另一个查询

php - UTF-8贯穿始终

php - 从 db 获取数据到 laravel 5.2 中的 View 的问题

javascript - 如何将 javascript 变量从 .js 文件导入到 html 文档

html - 如何切割溢出的div css

mysql 使用 ORDER BY 优化慢查询