【问题标题】:MySQL query returns null from PHP code but works fine in terminalMySQL 查询从 PHP 代码返回 null 但在终端中工作正常
【发布时间】:2013-09-30 12:00:57
【问题描述】:

当我在 PHP 中运行这段代码时,结果为 null,但是当我在 mysql 终端或 phpmyadmin 中运行它时,我得到了我想要的。

PHP

if ($_GET["action"] == "list") {
    //Get records from database
    $mainQuery = mysql_query("
    SET SQL_BIG_SELECTS=1;
    SELECT
      ci.id AS item_id,
      ar.title, ar.introtext, 
      flo.value AS logo, fph.value AS phone, fad.value AS address, fur.value AS url, fse.value AS services, fma.value AS map,
      ar.id AS joomla_id, ci.hidden_id, ci.type
    FROM kd9fb_content ar
      RIGHT JOIN calc_settings cs ON ar.catid = cs.joomla_cat  
      LEFT JOIN kd9fb_fieldsattach_values flo ON flo.articleid = ar.id AND flo.fieldsid = 1
      LEFT JOIN kd9fb_fieldsattach_values fph ON fph.articleid = ar.id AND fph.fieldsid = 2
      LEFT JOIN kd9fb_fieldsattach_values fad ON fad.articleid = ar.id AND fad.fieldsid = 3
      LEFT JOIN kd9fb_fieldsattach_values fur ON fur.articleid = ar.id AND fur.fieldsid = 4
      LEFT JOIN kd9fb_fieldsattach_values fse ON fse.articleid = ar.id AND fse.fieldsid = 5
      LEFT JOIN kd9fb_fieldsattach_values fma ON fma.articleid = ar.id AND fma.fieldsid = 6
      LEFT JOIN calc_item ci ON ci.joomla_id = ar.id
      ORDER BY ci.id DESC;
    ", $con);

    while ($row = mysql_fetch_array($mainQuery)) {      
        $rows[] = $row;
    }
    //Return result to jTable
    $jTableResult = array();
    $jTableResult['Result'] = "OK";
    $jTableResult['Records'] = $rows;
    print json_encode($jTableResult);
}

这将返回 NULL:

$row = mysql_fetch_array($mainQuery)

MySQL base 没问题,代码通过这个连接到base:

$con = mysql_connect($host, $user, $password) or die("DB login failed!");
mysql_select_db($db, $con) or die("select failed");
mysql_query("SET NAMES utf8");

类似的代码,但其他查询工作正常,我对其进行了测试,显然是请求中的情况。顺便说一句,我认为它是完全非最佳方式构建的,但我不擅长 SQL 和 PHP。

那么问题出在哪里,我哪里出错了?

【问题讨论】:

  • 您希望 $rows 中的数组格式是什么?
  • 尝试使用 mysql_fetch_row 而不是 mysql_fetch_array
  • @bruno.karklis 结果应该是这样的,但要困难得多:{"Result":"OK","Records":[{"0":"1","id" :"1","1":"asd","name":"asd"}]}
  • @bruno.karklis 我试过 fetch_row,但结果仍然是:{"Result":"OK","Records":null}。我认为问题出在mysql查询中,但我不知道在哪里。
  • @JayHarris 我的代码和我使用 PDO 的根本区别是什么?当然,我没有给出最终代码,而且我需要处理好它,这使得 sql 注入更安全。但是现在代码即使以如此简单的形式也无法运行。

标签: php mysql sql json joomla


【解决方案1】:

您的查询实际上有两个查询。

"SET SQL_BIG_SELECTS=1;
SELECT
  ci.id AS item_id,
  ar.title, ar.introtext, ....."

删除查询的第一行应该没问题。这是因为 mysql_query() 方法只支持一个查询。但我认为这个限制在终端 IIRC 中被删除了。

如果您需要第一条语句,只需执行两种查询方法:

mysql_query("SET SQL_BIG_SELECTS=1");
$query = "..."; // Rest of your query here

【讨论】:

    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2016-11-04
    • 2017-08-16
    • 2017-08-23
    • 2010-10-30
    • 2011-01-15
    相关资源
    最近更新 更多