2

私は一日中、単一の mysql データベースからデータを取得する php スクリプトに取り組んできました。私のスクリプトは正常に動作しましたが、突然 mysql が特定のクエリで行を返さなくなりました。複雑な結合から始まりましたが、今では特定の 1 つのクエリで行が返されません。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

それが私が望んでいた結果です。タグセット名_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( '')

まだ 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

$ db ...のオブジェクトタイプは何ですか?$resから結果を取得する必要があるかもしれません

つまり、$ data = $ res-> fetchAll();

于 2013-03-01T00:43:19.337 に答える
0

私は信じる必要'はありません。'233'

于 2013-03-01T00:41:28.287 に答える
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 に答える