2

我整天都在研究一个从单个 mysql 数据库中提取数据的 php 脚本。我的脚本运行良好,然后突然 mysql 停止返回带有某些查询的行。它从一个复杂的连接开始,但现在某个查询不会返回一行。粘贴到 phpmyadmin 中的相同查询确实返回一行。

一、查询:

    $sql = "SELECT tagsetsname_id FROM tagsets_docpaths_sets WHERE documents_paths_id = '233'";  //the '233' comes from {$_SESSION['document']['docpathid']}

当我将此查询粘贴到 phpmyadmin 中时,我得到以下结果:

tagsetsname_id
    0

这就是我想要的结果。tagsetsname_id 为 0。

当我在 php 脚本中尝试此操作时:

    //$db is connection to a database, some queries are working so $db is connected
    $sql = "SELECT tagsetsname_id FROM tagsets_docpaths_sets 
    WHERE documents_paths_id = '233'";
$res = $db->query($sql);

然后在 Firebug 中查看 $res,我得到以下结果:

    mysqli_result(
    current_field =
    field_count =
    lengths =
    num_rows =
    type =
    )

它是空的。我很困惑。

我重新启动了apache;我重新启动了mysql。

我会错过什么简单的事情?

我是 mysql 新手。数据库会以某种方式损坏吗?有重建或我可以尝试的东西吗?

* *脚本

    $sql = "SELECT tagsetsname_id FROM tagsets_docpaths_sets \
    WHERE documents_paths_id = '{$_SESSION['document']['docpathid']}'";
    //{$_SESSION['document']['docpathid']} = 233;

    $res = $db->query($sql);
    $row = $res->fetch_row();
    $firephp->trace($db);
    $firephp->group('tags');
    $firephp->log('$sql');
    $firephp->trace($sql);
    $firephp->log('$row');
    $firephp->trace($row);
    $firephp->groupEnd();

* *调试

    mysqli(
    affected_rows =
    client_info =
    client_version =
    connect_errno =
    connect_error =
    errno =
    error =
    field_count =
    host_info =
    info =
    insert_id =
    server_info =
    server_version =
    stat =
    sqlstate =
    protocol_version =
    thread_id =
    warning_count =
    )

    SELECT tagsetsname_id FROM tagsets_docpaths_sets WHERE documents_paths_id = '233' 

     $row
    null
    File         Line   Instruction
    .../create_metatags.php

    291

    FirePHP->trace( '')

YET 在 phpmyadmin 中,从调试中粘贴的 $sql 可以完美运行。我疯了吗?!

4

4 回答 4

1

如本页http://us3.php.net/manual/en/mysqli-result.fetch-row.php所示, $res->fetch_row() 以具有数字索引的数组返回结果。您的结果应该在 $row[0] 中。

于 2013-07-20T22:36:34.353 回答
0

你不需要我相信'的。'233'

于 2013-03-01T00:41:28.287 回答
0

$db... 的对象类型是什么?您可能需要从 $res 获取结果

即 $data = $res->fetchAll();

于 2013-03-01T00:43:19.337 回答
0

这个问题看起来很明显,首先你在传递数字数据时没有使用确切的语法来等于某个字段。其次,您没有从数据库中获取任何东西,甚至没有执行,甚至没有准备执行。这是正确的,你不能在屏幕上看到任何东西...尝试按照以下...

<pre>
$sql = "SELECT tagsetsname_id FROM tagsets_docpaths_sets 
    WHERE documents_paths_id = 233 ";  // with out (').
$res = $db->query($sql);
</pre> 

然后在查询sql后添加以下内容...

<pre>
$query = $db->prepare($sql);      
$query->execute();
$ent = $query->fetchAll();
</pre>

一般用这个...

<pre>
 $sql = "SELECT tagsetsname_id FROM tagsets_docpaths_sets 
        WHERE documents_paths_id = 233 ";  // with out (').
 $query = $db->prepare($sql);      
 $query->execute();
 $ent = $query->fetchAll();
</pre>

然后 print_r($ent); 现在您应该将可用数据列表作为数组获取。

这有帮助吗?

于 2013-07-20T23:03:07.723 回答