php - PHP PDO FOUND_ROWS()は0を返します

原文 php pdo mysqli percona mysqlnd

製品環境ではPDOコネクタを使用しており、最近、新しい問題に直面しています。どういうわけか、mysql FOUND_ROWS()は0を返します

また、mysqlコンソールでSQLクエリを手動で実行しようとしましたが、FOUND_ROWS()はコンソールで正しい数を返します。

私が見つけたもの:PDOが壊れ、mysqliが機能する

テストコード:

<?php
$db = new PDO('mysql:host=dbhost;dbname=projectname;charset=utf8', 'projectname', '***');
print_r($db->query("SELECT SQL_CALC_FOUND_ROWS `id_sales_order` FROM `sales_order` WHERE RAND() > 0.8 LIMIT 0, 1")->fetchAll(PDO::FETCH_ASSOC));
print_r($db->query("SELECT FOUND_ROWS()")->fetchAll(PDO::FETCH_ASSOC));

$mysqli = new mysqli("dbhost", "projectname", "***", "projectname");
print_r($mysqli->query("SELECT SQL_CALC_FOUND_ROWS `id_sales_order` FROM `sales_order` WHERE RAND() > 0.8 LIMIT 0, 1")->fetch_assoc());
print_r($mysqli->query("SELECT FOUND_ROWS()")->fetch_assoc());


結果:

Array
(
    [0] => Array
    (
        [id_sales_order] => 13
    )

)
Array
(
    [0] => Array
    (
        [FOUND_ROWS()] => 0
    )

)
Array
(
    [id_sales_order] => 7
)
Array
(
    [FOUND_ROWS()] => 670336
)


バージョン:

Mysql Server version: 5.6.21-70.0-log Percona Server (GPL), Release 70.0, Revision 688

PHP 5.4.33 (cli) (built: Sep 20 2014 16:20:03) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

MysqlI Support => enabled
Client API library version => mysqlnd 5.0.10 - 20111026 - $Id: c85105d7c6f7d70d609bb4c000257868a40840ab $

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: c85105d7c6f7d70d609bb4c000257868a40840ab $
答え
以前に同じ問題がありましたが、fetch(PDO::FETCH_COLUMN)を使用して修正しました。

print_r($conn->query("SELECT FOUND_ROWS()")->fetch(PDO::FETCH_COLUMN));
関連記事

javascript - バックグラウンドでajaxクリックボタン実行フォーム

php - PHP未登録の場合、プライマリドメインが有効かどうかを確認しています

php - php .htaccessクリーンURL

javascript - PHP、CSS、JavaScriptまたは可能なあらゆる手段で、異なるアカウントレベルの画像をぼかします

php - iOSではRNCryptor暗号化、PHPでは復号化

php - PHP-Twilio記録期間値の問題

php - PHPでの正規表現による文字列の分割

php - MYSQL / Query Builder / Eloquent-行を列に転置する

php - Facebookオープングラフテキストに含まれるマークアップ形式の仕様

javascript - JavaScriptイベントハンドラー(マウスオーバー)が起動しない