Xiaobai、いくつかアドバイスをください: このコード構造を最適化するにはどうすればよいですか?
私は次のように設計しました: 1 つはデータベース接続ファイル db.conn.php で、もう 1 つはカスタム関数ファイル config.inc.php です
db.conn.php:
<?php$db_host = 'localhost';$db_user = '*****';$db_password = '*******';$db_database = '******';$conn = new mysqli($db_host, $db_user, $db_password, $db_database);mysqli_query($conn, "set names 'utf8'"); if(mysqli_connect_errno()){die('数据库连接失败: ' . mysqli_connect_error());}$site_data = $conn->query("SELECT * FROM `dh_member_control` WHERE `id`=1");$site = mysqli_fetch_array($site_data);?>
config.inc.php:
function marrbase(){if(isset($_COOKIE["uname"]) && isset($_COOKIE["uid"])){global $mbase;global $conn;$mql = "select * from dh_member where `id`=" . $_COOKIE["uid"] . " and `mck`=1";$mbase_data = mysqli_query($conn, $mql);$mbase = mysqli_fetch_array($mbase_data);}else{exit();}}function login_log($muid){if (empty($muid)){exit();}else {global $conn;$lql = "INSERT INTO `dh_mllog` (`uid`,`ltime`,`lip`,`lptxt`) VALUES (". $muid .",'". date("Y-m-d H:i:s") ."','". getIPaddress() ."','". getIPS138(getIPaddress()) ."')" ;if (!mysqli_query($conn, $lql)){die(mysqli_error());exit();}}}function memberislogin($back = NULL){if(!isset($_COOKIE["uname"]) || !isset($_COOKIE["uid"])){echo "<script>alert('没有登录');window.location.href=\"/member/login.php?backurl=". $back ."\";</script>"; exit();}else {global $conn;$login_check = mysqli_query ("SELECT * FROM `dh_member` WHERE `id`=". $_COOKIE["uid"] ." AND `mck`=1");if(!mysqli_num_rows($login_check)){echo "<script>window.location.href=\"/member/login.php?backurl=". $back ."\"</script>"; exit();}}}.....等等自定义函数
ユーザー フロントエンドでこれらのファイルを参照し、出力対話やその他の操作を実行します。
現在、関数をカスタマイズするたびにグローバル $conn を参照する必要があると感じています。もっと良い設計方法はありますか?それ?
Web デザイン全体のより良いデザイン方法はありますか (CMS は推奨しません)
大規模なプロジェクトを手がけた専門家からのアドバイスをお願いします。 mysqli クラスの db
は以下を提供します:
count 属性、影響を受けるアイテムの数を返すために使用されます
fetch メソッド、クエリ命令で渡され、1 次元配列を返します fetchall メソッド、クエリ命令で渡され、2 次元配列を返しますexec メソッド。非クエリ クラス命令の実行に使用されます
基本的には十分です
コードのカプセル化と mysql モジュールのカプセル化については、必要な他の場所でこのファイルを参照し、カプセル化されたインターフェイスを直接呼び出します。
mysqli から db クラスを継承します
以下を提供します:
count 属性、影響を受ける項目の数を返すために使用します
fetch メソッド、クエリ命令を渡し、1 次元配列を返します
exec メソッドはクエリ以外の命令を実行するために使用されます
基本的にはこれで十分です
ありがとう、このようなリソースは以前にも見たことがあります。これは一般的なデータベース操作クラスです。 ?
fetchall メソッド、受信クエリコマンドは 2 次元配列を返します
exec メソッド、クエリ以外の命令の実行に使用されます
この 2 つがよくわかりません どのような状況で 2 次元配列を返しますか一般的に使用されます
コードのカプセル化と mysql モジュールのカプセル化について学び、必要に応じてこのファイルを参照し、カプセル化されたインターフェイスを直接呼び出します。
ありがとうございます。サンプルコードはありますか?
常に複数のレコードをクエリしますか?例えば記事一覧 一番簡単な書き方は
class db extends mysqli { function __construct() { parent::__construct('localhost', '用户名', '口令', '数据库'); $this->query('set names utf8'); } function fetch($sql) { $rs = $this->query($sql); return $rs->fetch_assoc(); } function fetchall($sql) { $rs = $this->query($sql); while($row = $rs->fetch_assoc()) { $res[] = $row; } return $res; } funetion exec($sql) { return $this->query($sql); }}
例
$p = new db;print_r($p->fetch("select * from a"));print_r($p->fetchall("select * from a"));
mysqliクラスを継承しているのでmysqliクラスのメソッドや属性が存在するので、いちいちコピーする必要はありません
あなたの INSERT INTO `dh_mllog`.... それは非クエリ命令ではありませんか?
あなたの INSERT INTO `dh_mllog`.... それは非クエリ命令ではありませんか?常に複数のレコードをクエリしますよね?例えば記事一覧
class db extends mysqli { function __construct() { parent::__construct('localhost', '用户名', '口令', '数据库'); $this->query('set names utf8'); } function fetch($sql) { $rs = $this->query($sql); return $rs->fetch_assoc(); } function fetchall($sql) { $rs = $this->query($sql); while($row = $rs->fetch_assoc()) { $res[] = $row; } return $res; } funetion exec($sql) { return $this->query($sql); }}
$p = new db;print_r($p->fetch("select * from a"));print_r($p->fetchall("select * from a"));
mysqliクラスを継承しているのでmysqliクラスのメソッドやプロパティが存在し、いちいちコピーする必要がありません
ありがとうございますモデレータさん
Your INSERT INTO `dh_mllog`.... それはクエリではないコマンドではありませんか?
あなたは常に複数のレコードをクエリしますよね?例えば記事一覧
class db extends mysqli { function __construct() { parent::__construct('localhost', '用户名', '口令', '数据库'); $this->query('set names utf8'); } function fetch($sql) { $rs = $this->query($sql); return $rs->fetch_assoc(); } function fetchall($sql) { $rs = $this->query($sql); while($row = $rs->fetch_assoc()) { $res[] = $row; } return $res; } funetion exec($sql) { return $this->query($sql); }}
例
$p = new db;print_r($p->fetch("select * from a"));print_r($p->fetchall("select * from a"));
mysqliクラスを継承しているのでmysqliクラスのメソッドやプロパティが存在するので、いちいちコピーする必要はありません
モデレーターさん、ありがとうございます
ちょっと聞きたいのですが、次の段落は、クラスメソッドの呼び出しに従ってどのように書き換えるべきですか?
<?$hot_vip_data = $conn->query("SELECT * FROM dh_member WHERE `mck`=1 AND `photo`<>'/images/nan.png' AND `photo`<>'/images/nv.png' ORDER BY `mpower` DESC,`cktime` DESC LIMIT 1,12");$i=1;while ($hot_vip = mysqli_fetch_array($hot_vip_data)){if ($i % 6 == 0){$last=" class=\"last\"";}else{$last="";}$i++;?><li <? echo $last;?> onclick="javascript:location.href='/display/?<? echo $hot_vip["id"]?>.html'"><div class="vpc"><img src="<? echo $hot_vip["photo"]?>" /></div><div class="vpn"><? if (strlen($hot_vip["unick"])>4){echo cut_str($hot_vip["unick"],4);}else{echo $hot_vip["unick"];}if ($hot_vip["mpower"]==2){ echo " <a href=\"/vip/\" title=\"初遇会员\"><img src=\"/images/v.png\" /></a>";} ?></div><div class="vpt"><? $timediff = strtotime (date("y-m-d")) - strtotime($hot_vip["sri"]) ;echo intval($timediff/(86400*365)) . "岁 ";echo $hot_vip["add"];?></div></li><? }?>
このように書き換えられていますか?
rree
rree
rree
モデレーターありがとうございます

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています
