- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 PHP/PDO 和 MySQL 的问题
当我使用 SQL_CALC_FOUND_ROWS 运行查询然后选择 FOUND_ROWS() 时,80% 的时间返回 0,其余时间 FOUND_ROWS 是准确的
我已将其简化为一个简单的测试循环,但这在我的开发服务器上运行良好,但在生产环境中,测试用例存在不一致问题。
即使在生产环境中,从 MySQL 命令行运行相同的查询也能正常工作,所以这似乎是一个 PHP/PDO 问题
PHP 5.5.28 - 使用 mysqlnd 5.0.11-devPercona Server 5.6.25-73.1-登录CentOS 6.6 (Final)
有人可以帮忙吗?我已经尝试了我能想到的一切,我正在撕毁我的头发
<?php
require_once "../consts.php";
$nolimit_query = "select SQL_CALC_FOUND_ROWS targetusers.u_id
FROM
users targetusers
LEFT JOIN user_extra targetuserextra ON (targetuserextra.ue_userid = targetusers.u_id)
LEFT JOIN countries ON (c_id = targetusers.u_country)
LEFT JOIN cities ON (cities.ct_countryid = c_id and cities.ct_id = targetusers.u_city)
LEFT JOIN userimages ON (targetusers.u_primaryimage = userimages.ui_id and userimages.ui_userid = targetusers.u_id and userimages.ui_imagetype = 'P')
WHERE
(targetusers.u_deleted = 0) and
(targetusers.u_id NOT IN (19, 32, 115)) and
(targetusers.u_active = 1) and
(targetusers.u_confirmed=5) order by u_lastupdated DESC LIMIT 10, 10";
// already tried this soln suggested elsewhere -- defaults to off for my PHP anyway though
ini_set("mysql.trace_mode", 0);
ini_set("display_errors", 1);
// set up PDO connection
$dbh = new PDO(
"mysql:host=" . Config::Get()->DB_SERVER . ";dbname=" . Config::Get()->DATABASE_NAME . ";charset=utf8",
Config::Get()->DB_USERNAME,
Config::Get()->DB_PASSWORD
);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_PERSISTENT, false);
echo $dbh->getAttribute(PDO::ATTR_CLIENT_VERSION) . "<br>";
echo $dbh->getAttribute(PDO::ATTR_DRIVER_NAME) . "<br>";
echo $dbh->getAttribute(PDO::ATTR_SERVER_INFO) . "<br>";
echo $dbh->getAttribute(PDO::ATTR_SERVER_VERSION) . "<br><br>";
echo date("r") . "<br>";
for ($i=0; $i<5; $i++)
{
// run query above
$stmt = $dbh->prepare($nolimit_query);
if ($stmt === FALSE)
{
die($stmt->errorInfo());
}
// get result set
if (($result = $stmt->execute()) === TRUE)
{
$a = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
$stmt = NULL;
// this query returns inconsistent results (80% of the time it returns 0!)
$b = $dbh->query("SELECT FOUND_ROWS() as cnt")->fetch(PDO::FETCH_ASSOC);
echo "FOUND ROWS = " . $b["cnt"] . "<br>";
}
}
此脚本的输出如下。
请注意,5 个循环中只有 2 个返回 FOUND_ROWS 的正确值,其他 3 个返回 0
mysqlnd 5.0.11-dev - 20120503 - $Id: 15d5c781cfcad91193dceae1d2cdd127674ddb3e $
mysql
Uptime: 1857223 Threads: 1 Questions: 4446069 Slow queries: 32 Opens: 465 Flush tables: 1 Open tables: 403 Queries per second avg: 2.393
5.6.25-73.1
Fri, 04 Sep 2015 12:01:10 +0100
FOUND ROWS = 0
FOUND ROWS = 0
FOUND ROWS = 59836
FOUND ROWS = 0
FOUND ROWS = 59836
最佳答案
问题解决了。结果是 NewRelic 应用程序监控守护进程或扩展干扰了 FOUND_ROWS() 的结果
这太糟糕了:(
禁用扩展和 FOUND_ROWS 再次防弹
关于PHP PDO 为 SELECT FOUND_ROWS() 返回不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32396703/
我正在做以下事情 n = 10 SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT n, 20; SELECT FOUND_
我正在尝试设置一个用户登录页面(我学习 php 时的基本训练),但该页面无法正常工作,因为我认为我在计算行数的部分有问题 (我检查 user_table 数据库中输入的登录名和密码与已输入的行数是否匹
我有以下查询,执行时没有错误,但它没有返回正确的行数。当从一个表中选择而不是两个表时,相同的查询有效: SELECT FOUND_ROWS() as `total` FROM `products` t
我正在尝试加快某些 SQL 查询的速度。我的分页 SQL 查询是这样的(第 3 页): SELECT SQL_CALC_FOUND_ROWS book_id, book_title FROM
mysql found_row()用于获取Select得到的行数,比如有段sql需要取出一张表的前10行,同时又需要取出符合条件的总数。 本文章向大家介绍mysql found_row的用法,感兴趣
$result = $db_con->query("SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 0,10"); $count_result = $db_
我的数据库中有 3 条记录(用于测试目的),我使用 SQL_CALC_FOUND_ROWS 结合 LIMIT 返回行数以收集分页结果。 SELECT SQL_CALC_FOUND_ROWS * FRO
我正在使用 Entity Framework 5、MySQL 5.6 和 MySQLConnector 6.6.5。 我想在我的 Entity Framework 连接字符串中设置 FOUND_ROW
这是我的查询。 SELECT SQL_CALC_FOUND_ROWS (FOUND_ROWS() ) as total, (SELECT GROUP_CONCAT(sp.specialization)
我尝试在查询中使用 FOUND_ROWS(),但该函数有时会返回错误的值。 SELECT SQL_CALC_FOUND_ROWS adminslog.*, admins.fullName FROM a
我有一个类似于下面示例的查询(本文仅更改了列名),它使用 LIMIT 从 MySql 数据库返回分页记录选择,加上如果没有限制则返回的记录数通过 FOUND_ROWS() 应用。 在下面的示例中,SE
前言:我对 C# 的 MySqlConnector 和一般的 MySql 还很陌生。 我想实现的目标是执行一个查询,然后通过FOUND_ROWS获取SqlDataReader中返回的记录数。 这是我正
编辑:事实证明,代码似乎按预期运行。这只是一个调试问题。抱歉打扰! 我正在运行一个涉及多个过滤器和 JOIN 的大型查询,而且我正在对结果进行分页,因此查询运行了两次。 我尝试使用 SQL_CALC_
根据这个答案:here The use of SQL_CALC_FOUND_ROWS is not subject to race conditions. The result of the SELE
我必须运行一个具有限制和偏移量的查询,我还需要结果总数来构建分页。这是一个包含很多条件和连接的复杂查询,因此我想避免为了获得计数而执行两次查询。 根据 mysql docs我可以这样做: mysql>
当 PHP 脚本每秒有数百个查询时会发生什么?它会影响这些功能吗,是否保证它们会从当前脚本中的最后一个插入语句返回最后插入的 id?它会返回当前脚本中最后一次选择的行数吗?如果同时有来自另一个脚本的新
我在使用 MYSQL 时遇到问题。 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 工作不正常。 问题: 第一次总返回1 第二次总数返回正确的3,500 名 MYSQL版本: m
我已经找到了问题的解决方法,但这更多的是关于原因的问题。这是我的场景.. 我在包含数千条记录的表上使用以下代码: $stmt = $pdo->prepare("SELECT SQL_CALC_FOUN
我总共有 6 行。当我进行查询时(比如 SELECT * from table)并且我有 LIMIT 3 => FOUND_ROWS() 给出 3 => 检索到 3 行 LIMIT 1, 3 => F
作为背景知识,在 MySQL 中,通过 SQL_CALC_FOUND_ROWS 标志和 FOUND_ROWS() 函数,MySQL 允许您检索如果 SELECT 不使用 LIMIT 将返回的总行数,而
我是一名优秀的程序员,十分优秀!