私はこの3時間、これを越えて壁に頭をぶつけてきました。
PHP / MySQLアプリケーションの定期的なメンテナンスのために、少し前に書いた短いスクリプトがあります。問題はスクリプト自体ではありません。このPHPスクリプトは、そのURLから手動で呼び出すことができ、正常に実行され、想定どおりに実行されます。問題は、特定のイベントでスクリプトが実行されて機能しない場合に、アプリケーションにスクリプトを含めようとしたことです。
次の行の関数エラーでのみ、文字列オフセットを配列として使用できません。$ ingredientID = $ prepItems [$ i] ['ingredientID'];
エラーは、文字列を割り当ててからそれを配列として処理しようとすることを意味することを理解していますが、$ ingredientIDはこの行の前の関数のどこにも宣言されておらず、$ prepItems [$i]['ingredientID']自体が文字列ですとりあえず!チェックしたところ、$prepItemsが正しく返されました。戻ってURLを呼び出すと、スクリプトは機能しますが、アプリケーションの別のスクリプト内からそれを含めようとすると、機能しません。理解できません....
完全なコードは以下のとおりです。
//UPDATE PRODUCTION NUMBERS
function fixOrders(){
$k = 0;
$date = date('Y-m-d',strtotime('yesterday'));
$qry = "SELECT a.orderID,a.qty,a.date,a.itemID,b.itemName,b.itemType FROM orders a join items b on a.itemID = b.itemID WHERE a.date > '$date' AND a.itemID = '$itemID'";
$res = mysql_query($qry);
$qry = "INSERT INTO prep (orderID,dateProd,qty,itemID,dept) VALUES ";
while ($row = mysql_fetch_array($res))
{
$itemID = $row['itemID'];
$qty = $row['qty'];
$itemType = $row['itemType'];
$date = $row['date'];
$orderID = $row['orderID'];
$prepItems = prepItems($itemID);
if ($prepItems) removePrepItems($orderID);
$cp = count($prepItems);
if ($prepItems)
{
for ($i = 0; $i < $cp; $i++)
{
$ingredientID = $prepItems[$i]['ingredientID'];
$ingredientWeight = $prepItems[$i]['ingredientWeight'];
$ingredientUnit = $prepItems[$i]['ingredientUnit'];
$productionOffset = $prepItems[$i]['productionOffset'];
$qty = ($ingredientWeight * $qty);
if ($ingredientUnit == 'lbs') $qty = ($qty * 16);
$date = date('Y-m-d',strtotime($date.' +'.$productionOffset.' days'));
echo $date.' '.$productionOffset.'<br>';
$qry .= "('$orderID','$date','$qty','$ingredientID','$itemType'),";
}
$k++;
}
}
$qry = substr($qry,0,-1);
mysql_query($qry);
echo $qry;
}
fixOrders($itemID)