2017-08-04 54 views
0

我試圖將兩個數據庫連接到一個MySQL查詢,它也很棒!SELECT使乘法數據庫白色相同的表en在做

之後,我嘗試在正確的數據庫中查找順序數據以獲取meta_value。

但它會混合meta_value $的第一個名字,有時會在行上重複它們。

如果我只是連接1個數據庫,他們會出來,因爲他們應該有人可以看到出了什麼問題?

<?php 
$servername = "xxx"; 
$username = "xxx"; 
$password = "xxx"; 


$v1 = "_wp282"; 
$v2 = "_wp111"; 
$v3 = "_wp72"; 
$v4 = "_wp193"; 
$v5 = "_wp555"; 
$v6 = "_wp366"; 
$v7 = "_wp74"; 
$v8 = "_wp721"; 
$v9 = "_wp924"; 
$v10 = "_wp253"; 


// Create connection 
$conn = new mysqli($servername, $username, $password); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
echo "Connected successfully"; 

//Here I connect to both databases 
$query103 = mysqli_query($conn, "SELECT * FROM 
       `$v1`.`wpd2_posts` 
       where post_status='wc-processing' or post_status='wc-completed' 
        or post_status='wc-failed' UNION 
     SELECT * FROM `$v2`.`wpd2_posts` 
     where post_status='wc-processing' or post_status='wc-completed' 
      or post_status='wc-failed' order by post_date DESC ") or die(mysqli_error($conn)); 

?> 

<br> 
     <h2>Database 3</h2> 

     <table style="width: 100%"> 
      <tr> 
      <td>ID</td> 
      <td>??</td> 
      <td>??</td> 
      <td>??</td> 
      <td>??</td> 
      <td>??</td> 


      </tr> 
     <?php 
while ($row = mysqli_fetch_array($query103)) { 


    // Here I try to find what database the customer is on 
    $id2 = $row['ID']; 

    if ($row['ID'] == '') { 

     echo "intet id"; 
    } else { 

     $query = mysqli_query($conn, "SELECT * FROM `$v1`.`wpd2_posts` where ID = '$id2' ORDER BY id") or die(mysqli_error($conn)); 

     if (mysqli_num_rows($query) == '') { 

      $query = mysqli_query($conn, "SELECT * FROM `$v2`.`wpd2_posts` where ID = '$id2' ORDER BY id") or die(mysqli_error($conn)); 

      if (mysqli_num_rows($query) == '') { 

      } else { 
       $version = "coalsmil_wp111"; 

      } 

     } else { 
      $version = "coalsmil_wp282"; 

     } 


    } 

    echo "<tr>"; 
    echo "<td>" . $row['ID'] . "</td>"; 
    echo "<td>" . $row['post_date'] . "</td>"; 
    echo "<td>" . $row['post_status'] . "</td>"; 

    //And here I try to get the data out 


    $querynavn = mysqli_query($conn, "SELECT meta_value FROM `$version`.`wpd2_postmeta` where meta_key='_shipping_first_name' and post_id='$id2' ") or die(mysqli_error($conn)); 
    while ($row2 = mysqli_fetch_array($querynavn)) { 
     $fornavn = urldecode($row2['meta_value']); 
    } 
    echo "<td>" . $fornavn . "</td>"; 
    echo "<td>" . $version . "</td>"; 
    echo "<td>6</td>"; 
    echo "</tr>"; 

} 


?> 
</table> 
+2

**警告**:使用'mysqli'時,您應該使用[參數化查詢](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和['bind_param' ](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢。 **不要**使用字符串插值或連接來完成此操作,因爲您創建了嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**將'$ _POST','$ _GET'或**任何**用戶數據直接放入查詢中,如果有人試圖利用您的錯誤,這可能會非常有害。 – tadman

+0

注意:'mysqli'的面向對象的接口明顯較少,使得代碼更易於閱讀和審計,並且不容易與陳舊的'mysql_query'接口混淆。在你過於投入程序風格之前,它是值得轉換的。例如:'$ db = new mysqli(...)'和'$ db-> prepare(「...」)' – tadman

+0

但是提示避免關於服務器安全性的常見錯誤。顯示當前輸出和預期的示例。 – BitAccesser

回答

0

不要選擇*但指定每個柱,並用AS命名。像

SELECT `ID` as v1_ID, `post_status` as v1_post_status, `field1` as v1_field1 FROM 
      `$v1`.`wpd2_posts` 
      where post_status='wc-processing' or post_status='wc-completed' 
       or post_status='wc-failed' UNION 
    SELECT ID` as v2_ID, `post_status` as v2_post_status, `field1` as v2_field1 FROM `$v2`.`wpd2_posts` 
    where post_status='wc-processing' or post_status='wc-completed' 
     or post_status='wc-failed' order by post_date DESC 

您的結果數組whill然後包含您指定的所有字段名稱。

另外,請考慮@ tadman對您的帖子的評論並保持您的數據庫安全。

相關問題