私の問題は、$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を使用しています