2015-12-09 37 views
1

我已經編寫了一個可在phpmyadmin中工作的SQL語句。我在同一臺服務器上有兩個數據庫,我使用INNERJOIN來連接它們,並獲得正確的結果。我正在建立這個在PHP中,迄今已經做了一些正常的查詢,並得到正確的結果。我有一個包括我的數據庫,這是連接到一個數據庫,現在我想連接到兩個,即時通訊不知道如何引用這在我的PHP SQL語句。有人可以請幫助。參考兩個帶有通過PHP連接的SQL數據庫

我有這個。

<?php 
    error_reporting(0); 
    include './includes/opendb.php'; 
    extract($_POST); 

    $sql1 = mysql_query("SELECT f_clients.CLIENT_COMPANY, vtmastertrail.consultant, f_clients.CLIENT_CODE, vtcards.description, vtmastertrail.inspdate_start, vtmastertrail.inspdate_end, vtcards.typeofcard, vtcards.colour, vtcards.frequency, vtcards.priorityon, vtmastertrail.islive, f_clients.CLIENT_DEFAULTINSPECTIONSELL 
FROM `f_clients` 
INNER JOIN tcards.vtcards ON tcards.vtcards.client_code = f_clients.CLIENT_CODE 
INNER JOIN tcards.vtmastertrail ON tcards.vtmastertrail.card_id = tcards.vtcards.id 
WHERE tcards.vtmastertrail.consultant = '".$con_name."' 
AND tcards.vtmastertrail.inspdate_start >= '".$from_date."' 
AND tcards.vtmastertrail.inspdate_start <= '".$to_date."'"); 

    echo "<table border='1' align='center'> 
     <tr> 
     <th>Consultant</th> 
     <th>Client Code</th> 
     <th>Client</th> 
     <th>Address</th> 
     <th>Inspection Start Date</th> 
     <th>Inspection End Date</th> 
     <th>Type Of T-Card</th> 
     <th>T-Card Colour</th> 
     <th>Frequency</th> 
     <th>Priority</th> 
     <th>Report Sent Out</th> 
     <th>Cost</th> 
    </tr>";   

    while($row = mysql_fetch_array($sql1)) 
    { 
     echo "<tr>"; 
     echo "<td>" . $row['consultant'] . "</td>"; 
     echo "<td>" . $row['client_code'] . "</td>"; 
     echo "<td>" . $row['title'] . "</td>"; 
     echo "<td>" . $row['description'] . "</td>"; 
     echo "<td>" . $row['inspdate_start'] . "</td>"; 
     echo "<td>" . $row['inspdate_end'] . "</td>"; 
     echo "<td>" . $row['typeofcard'] . "</td>"; 
     echo "<td>" . $row['colour'] . "</td>"; 
     echo "<td>" . $row['frequency'] . "</td>"; 
     echo "<td>" . ($row['priorityon'] ? 'Yes' : 'No') . "</td>"; 
     echo "<td>" . ($row['signedoff'] ? 'Yes' : 'No') . "</td>"; 
     echo "<td>" . $row['CLIENT_DEFAULTINSPECTIONSELL'] . "</td>"; 
     echo "</tr>"; 
    } 

    echo "</table>"; 
} 

我基本上沒有從這個搜索結果。

這裏是我的db文件。

<?php 
    // ** database connection string 
    $conn = mysql_connect("localhost", "#####", "########") or die ('I cannot connect to the database because: ' . mysql_error()); 

    // ** Tcards database 
    mysql_select_db ("tcards"); 

我改變了隱藏的憑據。我有另一個名爲'test'的數據庫,它是f_clients表的地方。這是在同一臺服務器上,並具有相同的登錄憑據。任何人都可以幫我嗎?

+3

你絕對*做*不*要做'提取($ _POST);'永遠。這相當於「註冊全局變量」,因爲這是一個巨大的安全風險,所以從PHP中刪除。此外,您不應該將任何數據放入SQL查詢中,而不會被正確轉義。 – Ian

+0

謝謝,我似乎修復了它,錯誤在我的查詢似乎在phpmyadmin工作,但不是在PHP中。感謝提取功能的建議。什麼會用來代替這個? – user2405796

+0

您應該直接使用'$ POST' var,而不是按照您的方式將值放入SQL查詢中,請使用prepare語句。看看這個教程:http://markonphp.com/mysqli-select-prepared-statements/ – Ian

回答

1

如果您打算從兩個單獨的數據庫中進行選擇,則不需要調用mysql_select_db。

您的查詢需要使用完全限定的名稱(即「test.f_clients.CLIENT_COMPANY」等)。我認爲只要您完全限定數據庫名稱,您的ON子句就可以。

請注意,MySQL函數(mysql_query等)不推薦使用;請考慮切換到MySQLi或PDO。 MySQLi是一個簡單的開關。

另外請注意上面的所有Ian的註釋,關於解壓縮POST數組併爲您的查詢轉義數據。你必須安全地編碼,除非這是一個公司內聯網在某個防火牆的後面,即使這樣你也不能放心,它不會被利用....

+0

謝謝你的建議。我會考慮將其更改爲MYSQLi。 – user2405796

0

你可以做的一件事是爲兩個數據庫添加相同的用戶名和密碼。或者您可以使用視圖來解決您的問題。在實踐中,我成功地爲兩個數據庫添加了相同的用戶名和密碼。如果您喜歡嘗試使用「mysql workbench」,並且易於使用數據庫。