2015-12-09 36 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”,并且易于使用数据库。