2017-06-25 56 views
0

私は今言ったことをやろうとしています。私は2つの結合テーブルを持っています。それらは同じIDで結合されています。しかし、同じ名前の2つの列があり、そのうちの1つだけを出力したいだけです。同じIDで同じ列名であるが値が異なる2つのテーブルを結合する

$query= "SELECT * 
     FROM users 
     INNER JOIN bookings ON users.username = bookings.personal 
     JOIN products ON bookings.productid = products.productid 
     WHERE users.id = $id 
     "; 

$selectproductname = $db->prepare($selectuseremailquery); 
$selectproductname ->execute(array()); 
foreach($selectproductname as $index => $rs) : 

it gives me something like this table: 

-id -----id----products----products------ 
-          - 
-1  1  a cup  coffee cup - 
-2  2  a pen  a purple pen - 
-----------------------------------------  

コーヒーカップを出力したいが、同じ名前の2つの列がある。どうすれば出力できますか? *

<td><div> <?php echo $rs['products.productname']; ?> </div> </td> 

そして、私はそれをすべて選択する必要があります。

この

は動作しませんでした。

+3

'*'を使用する代わりに、結果に必要なすべての列を明示的に名前を付けます。例えば。 'bookings.id、bookings.name'など – wvdz

+1

Noo ...そのようなクエリを作成しないでください。 SQLインジェクションでは脆弱です。 –

+0

Thans Wvdz。私は解決した。ウィリアム、どういう意味ですか? –

答えて

2

SELECT *を使用することは、プロダクションソフトウェア、特にPHPで、おおよその理由から、considered harmfulです。

PHPでは、結果セットが連想配列にロードされることがあります。これにより、重複する列名の各セットの1つを除くすべてのデータが消えます。

あなたは、あなたの結果セットに必要な列を列挙する

 SELECT products.id, 
      products.productname, 
      products.id AS product_id, 
      bookings.*, 
      etc., etc. 

を使用します。 (私はあなたの列名を推測していることに注意してください)。

あなたの質問には、SELECT *を使用する必要があります。私はそれが本当であるとは思わない。もしそうなら、彼らが何を話しているのかを知らない誰かによって課される必要性が高いでしょう。

SELECT *を使用する必要がある場合は、結果セットのメタデータを使用して各列のメタデータを調べ、抽出する必要がある列を特定する必要があります。それはgetColumnMeta()です。

関連する問題