, Bir kenara bunu yapmak isteyebilirsiniz neden hakkında herhangi bir soru bırakarak, ve neden bir çapraz burada tüm katılmak yapmak isterim burada Kafamın üst kapalı gelebilir en iyi yoldur.
Her masada bir İZAH ve sonuç gelen programlama select ifadesi oluşturmak deneyebilirsiniz. İşte size rumuzlu bir dinamik olarak oluşturulan alan listesini verecek bir komut dosyası kötü bir örnek. Dinamik oluşturulan sorgu her tablo (Bu oldukça kolay önbelleğe alma ile hafifletilmiş olabilir rağmen) İZAH sorgu atılmasına neden olacak gibi bu olsa gerçekleştirmek sorguların sayısını artıracaktır.
<?php
$pdo = new PDO($dsn, $user, $pass, array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
function aliasFields($pdo, $table, $delim='__') {
$fields = array();
// gotta sanitise the table name - can't do it with prepared statement
$table = preg_replace('/[^A-z0-9_]/', "", $table);
foreach ($pdo->query("EXPLAIN `".$table."`") as $row) {
$fields[] = $table.'.'.$row['Field'].' as '.$table.$delim.$row['Field'];
}
return $fields;
}
$fieldAliases = array_merge(aliasFields($pdo, 'artist'), aliasFields($pdo, 'event'));
$query = 'SELECT '.implode(', ', $fieldAliases).' FROM artist, event';
echo $query;
Sonuç iki alt çizgi (ya da ne gibi delimeter, aliasFields üçüncü parametre (bkz.)) ayrılmış tablo ve sütun adı ile, bu gibi bir sorgu:
// ABOVE PROGRAM'S OUTPUT (assuming database exists)
SELECT artist__artist_id, artist__event_id, artist__artist_name, event__event_id, event__event_name FROM artist, event
Eğer sonuçları yineleme zaman oradan, sadece yapabileceğiniz bir tablo adını ve alan adını almak için aynı Ayraç ile her alan adının patlayabilir.
John Douthat cevabı yukarıdaki daha iyidir. PDO bazı sürücüler ile durum olabilir tehdit olarak alan meta, veritabanı tarafından döndürülen değil eğer sadece yararlı olacaktır.
İşte John yerine mysql_ * PDO kullanarak suggetsted ne için nasıl basit bir parçası olduğunu ():
<?php
$pdo = new PDO($dsn, $user, $pass, array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
$query = 'SELECT artist.*, eventartist.* FROM artist, eventartist LIMIT 1';
$stmt = $pdo->prepare($query);
$stmt->execute();
while ($row = $stmt->fetch()) {
foreach ($row as $key=>$value) {
if (is_int($key)) {
$meta = $stmt->getColumnMeta($key);
echo $meta['table'].".".$meta['name']."<br />";
}
}
}