提供された PHP スクリプトは、からのチェックイン要求を処理する機能として機能します。 Android アプリケーションとデータベースとの対話。ただし、プログラムではコードの特定のセクションを実行できないという問題が発生したため、「file4.txt」という名前のファイルを作成できませんでした。
開発者は、スクリプトがクエリ $query の実行時にのみファイルの作成に失敗したことを確認しました。さらに調査した結果、クエリを実行しようとしたときに、MySQL が「不明なテーブル ステータス: TABLE_TYPE」というメッセージを返していたことが判明しました。関数が正常に動作する場合と正常に動作しない場合があるため、この動作には一貫性がありませんでした。
この問題を解決するために、開発者は分割統治アプローチを提案しました。関数をより小さなセクションに分割することによって。具体的には、ファイル書き込みセクションが別の関数に分割されました:
<code class="php">function file_put($number, $data) { $path = sprintf("C:/temp/wamp/www/file%d.txt", $number); file_put_contents($path, $data); }</code>
これによりコードが簡素化され、デバッグが容易になりました。
さらに、開発者はデータベース操作を次のように再編成することを提案しました。 MySql と呼ばれる別のクラス。これにより、エラー処理が分離され、データベースに接続してデータを取得するためのより効率的な方法が提供されます:
<code class="php">class MySql { // ... (Database connection and query methods) ... }</code>
提案されたコードの結合ソリューションとして、更新された checkin() 関数はよりクリーンになり、保守が容易になりました。
<code class="php">function checkin(MySql $DB, $TechID, $ClientID, $SiteID) { $query = sprintf("SELECT `Type` FROM `Log` WHERE `TechID` = '%d' ORDER BY LogTime DESC LIMIT 1", $TechID); file_put(5, $query); $result1 = $DB->query("SELECT COUNT(*) FROM Log"); $result2 = $DB->query($query); foreach ($result1 as $row1) { list($count) = $row1; $data = "ClientID:$ClientID TechID:$TechID SiteID:$SiteID Count:$count"; file_put(3, $data); foreach ($result2 as $row2) { file_put(4, $data); } } }</code>
完全版MySql クラスを含むコード例が提供され、問題を分割して克服し、より管理しやすく効率的なソリューションを実現する方法を示しました。
以上が「不明なテーブルのステータス: TABLE_TYPE」を返す特定のクエリを実行すると、PHP スクリプトがファイルの作成に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。