簡體   English   中英

MySQL查詢返回mysql中的行,但PHP中為空

[英]MySQL query returns rows in mysql but empty set in PHP

以下MySQL查詢在PHP中運行時沒有錯誤,但結果集為空。 直接將查詢字符串輸出到文件,並使用'source [filename]'在MySQL客戶端中運行查詢,將返回預期的幾行結果。

是否有某些東西會導致此查詢不適用於PHP? categorylinks.cl_to和smw_spec2.value_string都是varbinary(255)。 顯示創建表指示engine = InnoDB和默認charset = binary。

我嘗試過但沒有成功的事情:

  • $sql = preg_replace("/[\\n\\t]+/", " ", $sql);
  • 將'_wpg'和'Derp'更改為CAST('_wpg' AS BINARY(255))
  • 將'_wpg'和'Derp'更改為BINARY '_wpg'

我正在使用MediaWiki DatabaseMysql類執行查詢和獲取行,但這是一個很薄的抽象,並且我確定這不是問題(請參見下文)。

SELECT 
    prop.name AS prop_name, prop.count AS prop_count, prop.type AS prop_type,
    val.value AS val_value, val.unit AS val_unit, val.count AS val_count
FROM
(
    SELECT 
        s_id, name, type, COUNT(foo.name) AS count
    FROM (  
        (
            SELECT
                cl.cl_to AS cat_name, s.smw_id AS s_id, s.smw_sortkey AS name, spec.value_string AS type
            FROM `smw_ids` s 
            INNER JOIN (`categorylinks` cl, `page` p, `smw_ids` s2, `smw_atts2` a)
                ON (cl.cl_from = p.page_id AND 
                    p.page_title = s2.smw_title AND 
                    s2.smw_id = a.s_id AND 
                    a.p_id = s.smw_id)
            LEFT JOIN `smw_spec2` spec ON s.smw_id = spec.s_id
        )

        UNION ALL           

        (
            SELECT 
                cl.cl_to AS cat_name, s.smw_id AS s_id, s.smw_sortkey AS name, '_wpg' AS type
            FROM `smw_ids` s 
            INNER JOIN (`categorylinks` cl, `page` p, `smw_ids` s2, `smw_rels2` a)
                ON (cl.cl_from = p.page_id AND 
                    p.page_title = s2.smw_title AND 
                    s2.smw_id = a.s_id AND 
                    a.p_id = s.smw_id)
        )
    ) AS foo

    WHERE foo.cat_name = 'Derp'
    GROUP BY name
    ORDER BY count DESC 
    LIMIT 10
) AS prop


INNER JOIN

(
    SELECT 
        bar.p_id AS p_id, bar.value AS value, bar.unit AS unit, COUNT(bar.value) AS count,
        IF( @prev != p_id, @rownum := 1, @rownum := @rownum+1 ) AS rank, 
        @prev := p_id 
    FROM (  
        (SELECT a.p_id AS p_id, a.value_xsd AS value, a.value_unit AS unit FROM `smw_atts2` a)
            UNION ALL
        (SELECT r.p_id AS p_id, s.smw_sortkey AS value, NULL AS unit
            FROM `smw_rels2` r INNER JOIN `smw_ids` s ON r.o_id = s.smw_id)
    ) AS bar

    GROUP BY value, unit
    ORDER BY count DESC

) AS val    
ON prop.s_id = val.p_id

WHERE val.rank <= 50

ORDER BY prop_count DESC, prop_name, val_count DESC, val_value  

編輯:以下測試腳本不輸出任何內容。 query.sql完全包含上面的查詢,並寫入MediaWiki數據庫類中mysql_query()調用之前的文件中。

$db = mysql_connect('localhost', 'root', '');
mysql_select_db('mediawiki', $db);

$res = mysql_query(file_get_contents("query.sql"), $db);

while ($row = mysql_fetch_assoc($res)) {
    var_dump($row);
}
echo mysql_error($db);

編輯:我導入了一個巨大的數據庫轉儲,然后,當我加載PHP頁面時,出現了明顯的等待,似乎表明查詢正在運行,但是仍然沒有結果顯示。 我最終重新處理了查詢,並且不再遇到這個問題。

嘗試以下操作以更好地檢測和報告錯誤:

$db = mysql_connect('localhost', 'root', '');
mysql_select_db('mediawiki', $db);

$res = mysql_query(file_get_contents("query.sql"), $db);
if (!$res) {
  print "SQL Error ".mysql_errno().":".mysql_error().", from query: '".file_get_contents("query.sql")."'";
} else {
  while ($row = mysql_fetch_assoc($res)) {
    var_dump($row);
  }
}

mysql_connect之后嘗試一下:

mysql_query('SET NAMES utf8;');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM