这是使用php和$u POST变量查询2个mysql表的正确方法吗?

这是使用php和$u POST变量查询2个mysql表的正确方法吗?,php,mysql,Php,Mysql,我一直在试图找出从数据库返回订单的最佳方式。我已经想到了这个,它正在以我想要的方式工作(我认为),它给了我我想要的结果,但我想知道它是否正确,或者是否有更好的方法 <?php $conn = mysql_connect('', '', ''); if (!$conn) { die('Could not connect: ' . mysql_error()); } mysql_select_db($dbs, $conn); $Order_ID = $_POST['Order_I

我一直在试图找出从数据库返回订单的最佳方式。我已经想到了这个,它正在以我想要的方式工作(我认为),它给了我我想要的结果,但我想知道它是否正确,或者是否有更好的方法

<?php

$conn = mysql_connect('', '', ''); 
if (!$conn) 
{ 
die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db($dbs, $conn);

$Order_ID = $_POST['Order_ID'];
//$Order_ID = '1001';

    $queryOrderHead = "SELECT * FROM Orders WHERE Order_ID = '$Order_ID' ";

    $queryOrderLines = "SELECT *

    FROM Order_LineDetails 
    WHERE Order_LineDetails.Order_ID = '$Order_ID'

";
        if ($queryRunHead = mysql_query($queryOrderHead)){

                while ($info_HEAD = mysql_fetch_array($queryRunHead))       
                {
                    $OrderID_HEAD = $info_HEAD['Order_ID'];         
                    $User_ID_HEAD = $info_HEAD['User_ID'];  
                    $Customer_ID_HEAD = $info_HEAD['Customer_ID'];                          
                    echo $OrderID_HEAD.' '.$User_ID_HEAD.' '.$Customer_ID_HEAD.'<br>';
                }

                $queryRunLines = mysql_query($queryOrderLines);
                while ($info = mysql_fetch_array($queryRunLines))       
                {
                    $OrderID = $info['Order_ID'];           
                    $OrderLineID = $info['OrderLineItem_ID'];           
                    echo $OrderID.' '.$OrderLineID.'<br>';
                }

        } else {
        echo mysql_error();         
        }

mysql_close($conn);
?>

因此,它所做的就是使用$\u POST中的
Order\u ID
val并运行第一个查询,然后在成功时使用相同的
Order\u ID
并循环第二个查询,并从不同的表中获取所有
Order\u LineDetails

除了
mysql\u real\u escape()
标记之外

有什么建议或想法吗

有什么建议或想法吗

首先选择订单,然后选择其项目没有什么错。但是,将数据组织到数组结构中以及遵循更好的命名约定(对于变量和数据库模式)会使您受益匪浅:

$orderId=$\u POST['order\u id'];
//order_id应该是INT,所以没有引号。
//还可以使用PDO查看参数化查询,因为mysql_*函数已经过时了!
$sqlOrder=“选择*
从命令
其中order_id=“.mysql_real_escape_字符串($orderId);
$order=array();
if($resOrder=mysql\u查询($sqlOrder)){
if($rowOrder=mysql\u fetch\u数组($resOrder)){
$order=$rowOrder;
//echo$rowOrder['order\u id'.'。$rowOrder['user\u id'.'.'。$rowOrder['customer\u id'.]。“
\n”; $sqlOrderLines=“选择* 从订单行 其中order_lines.order_id=“.mysql_real_escape_string($orderId)); if($resOrderLines=mysql\u查询($sqlOrderLines)){ $order['order_lines']=array(); 而($rowOrderLines=mysql\u fetch\u数组($resOrderLines)){ $order['order_lines'][]=$rowOrderLines; //echo$rowOrderLines['order\u id'.'。$rowOrderLines['order\u line\u id'.]。“
\n”; } } }否则{ 回显“未找到订单”。 } }否则{ echo mysql_error(); } //调试 打印(订单);
您可以消除对数据库的两个调用,只需进行一个调用,根据订单ID将两个表连接在一起。因此类似于
选择O.order\u ID、O.user\u ID、O.Customer\u ID,O.OrderLIneItem\u ID FROM Orders O LEFT JOIN order\u lineDetails OLD ON O.order\u ID=OLD.order\u ID其中O.order\u ID='$order\u ID'
理论上这应该更快,因为对数据库的调用更少,但是,您为每个记录返回了更多的数据,这可能会根据复制的数据量而抵消其好处。如果第一个查询始终返回1行数据,而第二个查询可能返回1到100多行数据,会怎么样?您选择的是订单,然后是订单项。这种方法没有错。放入数组将更好地组织。请确保清除post变量的值,例如,
$Order\u ID=intval($\u post['Order\u ID'])避免。解释否决票。他需要这样的指针。
$orderId = $_POST['order_id'];

// order_id should be an INT, so no quotes. 
// Also look into parameterized queries with PDO as the mysql_* functions are archaic!
$sqlOrder = "SELECT * 
             FROM orders 
             WHERE order_id = ".mysql_real_escape_string($orderId);

$order = array();
if ($resOrder = mysql_query($sqlOrder)) {

    if ($rowOrder = mysql_fetch_array($resOrder)) {
        $order = $rowOrder;
        // echo $rowOrder['order_id'].' '.$rowOrder['user_id'].' '.$rowOrder['customer_id']."<br />\n";

        $sqlOrderLines = "SELECT * 
                  FROM order_lines
                  WHERE order_lines.order_id = ".mysql_real_escape_string($orderId);

        if ($resOrderLines = mysql_query($sqlOrderLines)) {
            $order['order_lines'] = array();
            while ($rowOrderLines = mysql_fetch_array($resOrderLines)) {
                $order['order_lines'][] = $rowOrderLines;                 
                // echo $rowOrderLines['order_id'].' '.$rowOrderLines['order_line_id']."<br />\n";
            }
        }
    } else {
        echo 'Order not found'.
    }



} else {
    echo mysql_error();         
}

// debug
print_r($order);