4

私の問題は、$query->list_fields() を使用して mysql クエリから列を取得しようとしていることです。

私はローカルの Windows x64 マシンを持っており、PHP 5.4 を使用する必要がありましたが、すべて正常に動作し、問題はありませんでした。次に、LINUX centOS であるサーバーに移動しましたが、データベース呼び出しで列が引き戻されませんでした。シナリオの問題をローカル マシンでできる限り再現しましたが、ローカル マシンでは問題なくフィールドが引き戻されました。奇妙なことに、フィールドを引き戻して配列に入れるコードがあり、それは別の呼び出しでは機能しますが、必要な呼び出しでは機能しません。私はSQL呼び出しを検証し、それは私が望むものである単一の結果を返し、これを検証しました。

仕様は次のとおりです。

      |  Client                  |   Server
------|--------------------------|-----------------------------
OS    |  Windows x64 Professional|  CentOS release 6.4 (Final)
Apache|  Apache/2.4.4            |   2.2.24
MYSQL |  5.5.32                  |   5.5.33
PHP   |  5.4.16                  |   5.4

私が使用しているサーバーは、ホストゲーター共有プランです

phpコードは次のとおりです。

private function get_single_result_from_single_row_query(&$table, &$id, &$id_var = 'id')
{
    $query = $this->db->limit(1)->get_where($table, array($id_var => $id));
    if ($query->num_rows === 1)
    {
        $rows = ($query->result_object());
        $cols = $this->get_collumns_as_array($query);
        return $this->table_object_from_cols($cols, $rows[0]);
    }
    else
    {
        return NULL;
    }
}


private function get_collumns_as_array(&$query)
{
    $collumns = array();
    foreach ($query->list_fields() as $field)
    {
        log_message('error', 'col field: '. $field);
        array_push($collumns, $field);
    }
    if(empty($collumns))
    {
        log_message('error', 'collumns is empty'. $field);
    }
    return $collumns;
}

private function table_object_from_cols(&$collumns, &$row)
{
    if ($collumns == NULL || empty($collumns))
    {
        return NULL;
    }
    $table_object = array();
    foreach ($collumns as $col)
    {
        log_message('error', 'row->col : ' . $row->$col);
        $table_object[$col] = $row->$col;
    }
    return $table_object;
}

ご覧のとおり、理由を確認するための列がない場合、エラーが発生しました。また、行数が 1 の場合、クエリは前方にのみ進むことができます。

私の計画のために、どうやらサーバーをリモートでデバッグすることはできません

基本的に私は完全に困惑しています

編集:関数から「&」を削除しようとしましたが、違いはありません編集:サーバーでPHP 5.4を使用しています

4

6 に答える 6

1

PHP MySQL クライアント API ライブラリが更新されていないため、デフォルトでインストールされているもの (5.1.69) よりも新しいバージョンの MySQL を使用する CentOS 6.4 で (断続的/奇妙な) 問題が発生しました (phpinfo で確認してください)。バージョン 5.1.69)。その場合は更新する必要があります。

于 2013-10-16T19:35:51.277 に答える
0

ここに同じ問題があるようです

CodeIgniter リストフィールド

理由はわかりませんが、何がうまくいくかはこれに変わります

private function get_collumns_as_array(&$query){
    $row = $query->first_row();
    return array_keys($row);
}

ロギング機能などを元に戻す

クエリは機能しますか? アプリケーションは正しい mysql アドレスと正しいユーザーを使用していますか。アプリケーションが使用するユーザーとしてログインして、クエリを実行できますか?

于 2013-11-29T12:41:39.093 に答える
0

両方の Mysql インストールが同じように設定されているかどうかを確認します。たとえば、両方のサーバーの sql_mode が同じかどうかを確認します。

SELECT @@SESSION.sql_mode;

たとえば、1 つが厳密で、もう 1 つがそうでない場合、一方は結果 + 警告を表示し、もう一方はエラーのみを表示します。

于 2013-12-02T13:01:19.343 に答える
0

ファイル名の大文字と小文字を再確認できます。Windows はこれを無視するため、推奨システムとは異なる名前のファイルを見つけることができます。Linux に移動すると、ファイル名の大文字と小文字が区別され、システムが関連するライブラリ/モデル/その他を見つけられない可能性があります。

于 2013-11-26T07:37:59.693 に答える