我有一個名爲「卡車」的字段爲「truck_id」,「year」,「make」,「model」等的MySQL數據庫表。表中有六輛卡車。循環查詢,創建對象隨機跳過
我有一段PHP代碼循環遍歷每輛卡車並加載它。今天早上隨意 - 只有今天早上 - 卡車號碼4不會加載。
$TrucksQuery = Truck::GetTrucks();
while ($TruckRow = mysqli_fetch_assoc($TrucksQuery))
{
echo $TruckRow["truck_id"];
$T = new Truck();
$T->Load($TruckRow["truck_id"]);
var_dump($T);
}
上面的「回聲」顯示了所有6個truck_id。
「var_dump」顯示所有卡車的正確卡車對象(包含字段填充),除了卡車4之外,其中所有內容都是NULL,就好像它尚未加載一樣。
我正在調試代碼,運行上述可能十次,一切都很好,但卡車4不會加載。隨後,卡車4開始裝載。我解開了所有的更改,使代碼看起來像上面的塊,然後卡車4現在加載。我沒有更改數據庫,也沒有更改代碼,但現在它可以工作......這怎麼可能?
查詢數據庫直接工作正常,所以我不認爲它是腐敗的。
謝謝。
* EDIT 1 *
這裏是Truck->加載方法:
public function Load($truck_id = '')
{
global $db_link;
if ($truck_id != '')
$this->Settruck_id($truck_id);
//1.
$QueryString = "SELECT DISTINCT t.*, IFNULL((SELECT ot.truck_return_time
FROM trucks t
JOIN orders_trucks ot ON ot.truck_id = t.truck_id
WHERE NOW() BETWEEN ot.truck_leave_time AND ot.truck_return_time
AND t.truck_id = '".$this->Gettruck_id()."'), 'On hand') AS 'return_time', IFNULL((SELECT truck_leave_time
FROM orders_trucks
WHERE truck_id = '".$this->Gettruck_id()."'
AND truck_leave_time > NOW()
ORDER BY truck_leave_time ASC
LIMIT 1), '') AS 'next_job'
FROM trucks t
LEFT JOIN orders_trucks ot ON ot.truck_id = t.truck_id
WHERE t.truck_id = " . $this->truck_id;
$Result = mysqli_query($db_link, $QueryString);
$ResultArray = mysqli_fetch_assoc($Result);
$this->Settruck_id($ResultArray["truck_id"]);
//many more Set() calls
//2.
$QueryString = "SELECT t.t_name, t.territory_id
FROM territories t
LEFT JOIN truck_territories tt ON tt.territory_id = t.territory_id
LEFT JOIN trucks tr ON tr.truck_id = tt.truck_id
WHERE tr.truck_id = '".$this->truck_id."'";
$Result = mysqli_query($db_link, $QueryString);
$TempArray = array();
while($row = mysqli_fetch_assoc($Result))
$TempArray[] = $row["territory_id"];
$this->SetTerritoriesArray($TempArray);
}
*編輯2 *
此我今天再次發生,現在卡車3不會加載。以下是我在每輛卡車上執行var_dump時看到的內容......可能值得注意的是,看看PHP如何說「object(Truck)#x」並查看它們沒有按順序排列,並且數字7被使用了兩次一個是空的):
object(Truck)#3 (24) {
["truck_id":protected]=>
string(1) "1"
["year":protected]=>
int(4) 2006
}
object(Truck)#4 (24) {
["truck_id":protected]=>
string(1) "2"
["year":protected]=>
int(4) 2007
}
object(Truck)#7 (24) {
["truck_id":protected]=>
NULL
["year":protected]=>
NULL
}
object(Truck)#6 (24) {
["truck_id":protected]=>
string(1) "4"
["year":protected]=>
int(4) 2007
}
object(Truck)#5 (24) {
["truck_id":protected]=>
string(1) "5"
["year":protected]=>
int(4) 2007
}
object(Truck)#11 (24) {
["truck_id":protected]=>
string(1) "6"
["year":protected]=>
int(4) 2009
}
object(Truck)#7 (24) {
["truck_id":protected]=>
string(1) "7"
["year":protected]=>
int(4) 2012
}
另注:添加MYSQLI_USE_RESULT到mysqli_query()用於GetTrucks()返回任何結果,但一旦我刪除它,所有的卡車在結果正常。
然後,也許你應該看看你的'卡車::負載'方法:) –
我跑在卡車::負載直接在服務器內的查詢,他們工作正常 - 即使卡車4作爲對象是空的。 –
'$ T-> Load()'是否返回數據或在方法內部回顯數據?如果它正在返回數據,則應該爲其分配一個變量。例如'$ data = $ T-> Load([...]); var_dump($ data);' –