Php 数组拉出没有结果

Php 数组拉出没有结果,php,arrays,Php,Arrays,我编辑了上面没有结果的类。但是,下面的原始类会提取结果。请找个人帮忙 public function GetRoomTotalForDay($room, $date = null) { if(!isset($date)) { $date = date("Y-m-d"); } // This function is going to return the number of shoes

我编辑了上面没有结果的类。但是,下面的原始类会提取结果。请找个人帮忙

 public function GetRoomTotalForDay($room, $date = null) {

            if(!isset($date)) {

                $date = date("Y-m-d");

            }

            // This function is going to return the number of shoes processed that day

            // First of all work out which scanner number is required for the room

            $scanner = $this->GetScannerNumber($room);

            // Next generate the SQL

            $sql = "SELECT `scanners.KordNo`, `scanners.BundleNumber`

                    FROM `scanners`

                    WHERE `scanners.Date` = '" . $date . "'

                    AND `scanners.Scanner` IN (";

                foreach($scanner as $x) {

                    $sql .= $x . ",";

                }

            $sql .= "0);";

            // And query the database

            $result = mysql_query($sql);

            while($row = mysql_fetch_array($result)) {

                $return[] = $row;

            }

            // It is more complicated for Kettering, Closing & Rushden, we need to filter the list

            if(in_array($room, array(3,4,5))) {

                foreach($return as $x) {

                    $sql = "SELECT `scanners.Scanner`

                            FROM `scanners`

                            WHERE `scanners.KordNo` = " . $x['scanners.KordNo'] . "

                            AND `scanners.BundleNumber` = " . $x['scanner.BundleNumber'] . "

                            ORDER BY `scanners.Date` DESC

                            LIMIT 1,1;";

                    $result = mysql_query($sql);

                    $row = mysql_fetch_row($result);



                    // If scanner 7, it's been through bottom stock so need to find previous

                    if($row[0] == 7) {

                        $sql = "SELECT `scanners.Scanner`

                                FROM `scanners`

                                WHERE `scanners.KordNo` = " . $x['scanners.KordNo'] . "

                                AND `scanners.BundleNumber` = " . $x['scanners.BundleNumber'] . "

                                ORDER BY `scanners.Date` DESC

                                LIMIT 2,1;";

                        $result = mysql_query($sql);

                        $row = mysql_fetch_row($result);

                    }



                    if($row[0] == 10 && $room == 3) {

                        $finalReturn[] = $x;

                    } elseif($row[0] == 11 && $room == 4) {

                        $finalReturn[] = $x;

                    } elseif($row[0] == 15 && $room == 5) {

                        $finalReturn[] = $x;

                    }

                }

                $return = $finalReturn;

            }

            // Now we have a list of tickets, we need to query how many pairs are in each ticket

            $total = 0;

            foreach($return as $x) {

                $sql = "SELECT `QtyIssued`

                        FROM `ArchiveBundle`

                        WHERE `ArchiveBundle.KordNo` = '" . $x['scanners.KordNo'] . "'

                        AND `ArchiveBundle.BundleNumber` = '" . $x['scanners.BundleNumber'] . "';";

                $result = mysql_query($sql);

                $row = mysql_fetch_row($result);

                $total += $row[0];

            }

            return $total;

        }
上面的类别统计生产的鞋子数量。我不得不编辑这个类,这样它就可以排除某些类型的鞋子,但出于某种原因,它似乎没有得到任何结果

更新

这是扫描器类。这就是目前的情况。我对php相当陌生,这段代码是由我的前任编写的

   public function GetRoomTotalForDay($room, $date = null) {

            if(!isset($date)) {

                $date = date("Y-m-d");

            }

            // This function is going to return the number of shoes processed that day

            // First of all work out which scanner number is required for the room

            $scanner = $this->GetScannerNumber($room);

            // Next generate the SQL

            $sql = "SELECT `KordNo`, `BundleNumber`

                    FROM `scanners`

                    WHERE `Date` = '" . $date . "'

                    AND `Scanner` IN (";

                foreach($scanner as $x) {

                    $sql .= $x . ",";

                }

            $sql .= "0);";

            // And query the database

            $result = mysql_query($sql);

            while($row = mysql_fetch_array($result)) {

                $return[] = $row;

            }

            // It is more complicated for Kettering, Closing & Rushden, we need to filter the list

            if(in_array($room, array(3,4,5))) {

                foreach($return as $x) {

                    $sql = "SELECT `Scanner`

                            FROM `scanners`

                            WHERE `KordNo` = " . $x['KordNo'] . "

                            AND `BundleNumber` = " . $x['BundleNumber'] . "

                            ORDER BY `Date` DESC

                            LIMIT 1,1;";

                    $result = mysql_query($sql);

                    $row = mysql_fetch_row($result);



                    // If scanner 7, it's been through bottom stock so need to find previous

                    if($row[0] == 7) {

                        $sql = "SELECT `Scanner`

                                FROM `scanners`

                                WHERE `KordNo` = " . $x['KordNo'] . "

                                AND `BundleNumber` = " . $x['BundleNumber'] . "

                                ORDER BY `Date` DESC

                                LIMIT 2,1;";

                        $result = mysql_query($sql);

                        $row = mysql_fetch_row($result);

                    }



                    if($row[0] == 10 && $room == 3) {

                        $finalReturn[] = $x;

                    } elseif($row[0] == 11 && $room == 4) {

                        $finalReturn[] = $x;

                    } elseif($row[0] == 15 && $room == 5) {

                        $finalReturn[] = $x;

                    }

                }

                $return = $finalReturn;

            }

            // Now we have a list of tickets, we need to query how many pairs are in each ticket

            $total = 0;

            foreach($return as $x) {

                $sql = "SELECT `QtyIssued`

                        FROM `ArchiveBundle`

                        WHERE `KordNo` = '" . $x['KordNo'] . "'

                        AND `BundleNumber` = '" . $x['BundleNumber'] . "';";

                $result = mysql_query($sql);

                $row = mysql_fetch_row($result);

                $total += $row[0];

            }

            return $total;

        }

?>

您有一个打字错误-这段代码的最后一行缺少一个字母:

<?php


class CHScanners {



    var $conn;



    // Constructor, connect to the database

    public function __construct() {

        require_once "/var/www/reporting/settings.php";

        define("DAY", 86400);

        if(!$this->conn = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD)) die(mysql_error());

        if(!mysql_select_db(DB_DATABASE_NAME, $this->conn)) die(mysql_error());

    }



    public function ListRoomBundles($room, $date, $dateTo = null) {

        // If dateTo hasn't been set, make it now

        if(!isset($dateTo) or $dateTo == "") {

            $dateTo = $date;

        }

        // Return an array with each bundle number and the quantity for each day

        $scanner = $this->GetScannerNumber($room);

        $sql = "SELECT * FROM `scanners` WHERE `Scanner` IN (";

            foreach($scanner as $x) {

                $sql .= $x . ",";

            }

        $sql .= "0)

                AND `Date` BETWEEN '" . $date . "' AND '" . $dateTo . "'

                GROUP BY `KordNo`, `BundleNumber`;";

        $result = mysql_query($sql);

        while($row = mysql_fetch_array($result)) {

            $sql = "SELECT `BundleReference`, `QtyIssued`, `WorksOrder`

                    FROM `ArchiveBundle`

                    WHERE `KordNo` = '" . $row['KordNo'] . "'

                    AND `BundleNumber` = '" . $row['BundleNumber'] . "';";

            $result2 = mysql_query($sql);

            while($row = mysql_fetch_array($result2)) {

                if($row[0] != "") {

                    $final[] = $row;

                } else {

                    $final[] = array("Can't find bundle number", "N/A");

                }

            }

        }

        return $final;

    }



    public function GetRoomTotalForDay($room, $date = null) {

        if(!isset($date)) {

            $date = date("Y-m-d");

        }

        // This function is going to return the number of shoes processed that day

        // First of all work out which scanner number is required for the room

        $scanner = $this->GetScannerNumber($room);

        // Next generate the SQL

        $sql = "SELECT `scanners.KordNo`, `scanners.BundleNumber`

                FROM `scanners,TWOrder,Stock`

                                    INNER JOIN TWORDER ON `scanners.KordNo` = `TWOrder.KOrdNo`

                                    AND `scanners.Date` = '" . $date . "'

                INNER JOIN Stock ON `TWOrder.Product` = `Stock.ProductCode`

                                    AND `Stock.ProductGroup` NOT BETWEEN 400 AND 650  

                                    AND `scanners.Scanner` IN (

                                    ORDER BY `scanners.KordNo' ASC";

            foreach($scanner as $x) {

                $sql .= $x . ",";

            }

        $sql .= "0);";

        // And query the database

        $result = mysql_query($sql);

        while($row = mysql_fetch_array($result)) {

            $return[] = $row;

        }

        // It is more complicated for Kettering, Closing & Rushden, we need to filter the list

        if(in_array($room, array(3,4,5))) {

            foreach($return as $x) {

                $sql = "SELECT `scanners.Scanner`

                        FROM `scanners`

                        WHERE `scanners.KordNo` = " . $x['scanners.KordNo'] . "

                        AND `scanners.BundleNumber` = " . $x['scanners.BundleNumber'] . "

                        ORDER BY `scanners.Date` DESC

                        LIMIT 1,1;";

                $result = mysql_query($sql);

                $row = mysql_fetch_row($result);



                // If scanner 7, it's been through bottom stock so need to find previous

                if($row[0] == 7) {

                    $sql = "SELECT `scanners.Scanner`

                            FROM `scanners`

                            WHERE `scanners.KordNo` = " . $x['scanners.KordNo'] . "

                            AND `scanners.BundleNumber` = " . $x['scanners.BundleNumber'] . "

                            ORDER BY `Date` DESC

                            LIMIT 2,1;";

                    $result = mysql_query($sql);

                    $row = mysql_fetch_row($result);

                }



                if($row[0] == 10 && $room == 3) {

                    $finalReturn[] = $x;

                } elseif($row[0] == 11 && $room == 4) {

                    $finalReturn[] = $x;

                } elseif($row[0] == 15 && $room == 5) {

                    $finalReturn[] = $x;

                }

            }

            $return = $finalReturn;

        }

        // Now we have a list of tickets, we need to query how many pairs are in each ticket

        $total = 0;

        foreach($return as $x) {

            $sql = "SELECT `QtyIssued`

                    FROM `ArchiveBundle`

                    WHERE `KordNo` = '" . $x['scanners.KordNo'] . "'

                    AND `BundleNumber` = '" . $x['scanners.BundleNumber'] . "';";

            $result = mysql_query($sql);

            $row = mysql_fetch_row($result);

            $total += $row[0];

        }

        return $total;

    }



    // We need a function to select the previous Monday from a given date

    public function GetPreviousMonday($timestamp) {

        if(date("N", $timestamp) == 1) {

            return $timestamp;

        } elseif(in_array(date("N", $timestamp), array(2, 3, 4, 5))) {

            return $timestamp - (date("N", $timestamp)-1)*DAY;

        } elseif(in_array(date("N", $timestamp), array(6, 7))) {

            return $timestamp + (date("N", $timestamp)*(-1)+8)*DAY;

        } else {

            return false;

        }

    }



    public function GetRoomName($room) {

        // Return the room name from the room number

        switch($room) {

            case 1:

                return "Skin Room";

            case 2:

                return "Clicking Room";

            case 3:

                return "Kettering";

            case 4:

                return "Closing Room";

            case 5:

                return "Rushden";

            case 6:

                return "Assembly Room";

            case 7:

                return "Lasting Room";

            case 8:

                return "Making Room";

            case 9:

                return "Finishing Room";

            case 10:

                return "Shoe Room";

        }

    }



    public function GetDueDateForWorksOrder($worksOrderNumber) {

        $sql = "SELECT `DueDate`

                FROM `TWOrder`

                WHERE `WorksOrderNumber` = '" . $worksOrderNumber . "';";

        mysql_select_db(DB_DATABASE_NAME, $this->conn);

        $result = mysql_query($sql, $this->conn);

        $row = mysql_fetch_row($result);

        return $row[0];

    }



    private function GetScannerNumber($room) {

        // Get the room number from the scanner number

        switch($room) {

            case 1:

                $scanner = array(3);

                break;

            case 2:

                $scanner = array(10,11,15);

                break;

            case 3:

                $scanner = array(5);

                break;

            case 4:

                $scanner = array(5);

                break;

            case 5:

                $scanner = array(5);

                break;

            case 6:

                $scanner = array(6);

                break;

            case 7:

                $scanner = array(9);

                break;

            case 8:

                $scanner = array(8);

                break;

            case 9:

                $scanner = array(12);

                break;

            case 10:

                $scanner = array(14);

                break;

            default:

                $scanner = array(0);

                break;

        }

        return $scanner;

    }

}

这里的数组项应该是$x['scanners.BundleNumber']。

您是否尝试返回生成的SQL字符串,然后手动测试该字符串?我在第一个数组上执行了var_转储,它返回一个空数组。在sql server上运行的sql与这两个类都匹配。foreach$scanner作为$x{$sql.=$x.,;}将生成无效的sql片段,因为IN值的提升将以逗号结束。将0添加到$scanner数组中,然后使用内爆“,”,$scanner;相反另外,$scanner数组的内容被正确转义了,对吗?哦,还有一点关于编码风格的建议,您的函数太长了,乍一看似乎运行4或5个SQL查询。这么大的函数往往不是个好主意,因为它们更难维护或重用。作为一个一般的经验法则,我喜欢应用,如果一个函数/方法在我的IDE中不仅仅是一屏文本,那么它向我表明应该分解它。此外,DB查询函数应该运行1个查询,并且只能运行1个查询。每个查询包含一个操作,代码中的每个函数只能执行一个任务。我不明白这一点。你能举个例子吗?使用一个好的编辑器有助于防止这种错误。从ActiveState尝试Komodo IDE-有一个免费版本可用。
if(in_array($room, array(3,4,5))) {

            foreach($return as $x) {

                $sql = "SELECT `scanners.Scanner`

                        FROM `scanners`

                        WHERE `scanners.KordNo` = " . $x['scanners.KordNo'] . "

                        AND `scanners.BundleNumber` = " . $x['scanner.BundleNumber'] .