PHPの経験を積むために構築および拡張しているブログがあります。mysql から新しい mysqli に移行することにしました。また、変数を定義してデータベースに接続する別のファイルも作成しました。すべての変数と関数を定義する appConfig.php があります。
<?php
define("DEBUG_MODE", true);
define("SITE_ROOT", "http://blog.zacharysaathoff.com/");
define("DATABASE_HOST", "127.0.0.1");
define("DATABASE_USERNAME", "**********");
define("DATABASE_PASSWORD", "**********");
define("DATABASE_NAME", "**********");
define("HOST_WWW_ROOT", "/home1/ohairclu/public_html/zsaathoffblog/");
function js_redirect($url, $seconds=0) {
echo "<script language=\"JavaScript\">\n";
echo "<!-- hide from old browser\n\n";
echo "function redirect() {\n";
echo "window.location = \"" . $url . "\";\n";
echo "}\n\n";
echo "timer = setTimeout('redirect()', '" . ($seconds*1000) . "');\n\n";
echo "-->\n";
echo "</script>\n";
return true;
}
function handle_error($user_error_message, $system_error_message) {
js_redirect('http://blog.zacharysaathoff.com/error.php?error_message='.$user_error_message.'&system_error_message='.$system_error_message, 0);
exit();
}
function debug_print($message) {
if (DEBUG_MODE) {
echo $message;
}
}
echo "configured";
?>
また、データベースに接続する必要がある databaseConnection.php もあります。
<?php
require_once 'appConfig.php';
global $mysqli;
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
if ($mysqli->connect_errno) {
handle_error("There was a problem connecting to the database that holds the information we need to get you connected.", "Failed to connect to MySQL: (".$mysqli->connect_errno.") ".$mysqli->connect_error);
}
return $mysqli;
?>
グローバル変数が望ましくないことはわかっています。それは私が試したものでした。と同じことreturn
。私はそれがおそらくそこに属していないことを知っています. これらのファイルが必要なファイルは、homePageLinks.php です。
<?php
require_once 'appConfig.php';
require_once 'databaseConnection.php';
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
if ($mysqli->connect_errno) {
handle_error("There was a problem connecting to the database that holds the information we need to get you connected.", "Failed to connect to MySQL: (".$mysqli->connect_errno.") ".$mysqli->connect_error);
}
$stmt = $mysqli->prepare("
SELECT `date`, `title`, `path`, `image_path`
FROM `ohairclu_blog_comments`.`posts`
ORDER BY `date` DESC LIMIT 8;
") or handle_error("There was a problem getting the recent posts.", "prepare failed :".htmlspecialchars($mysqli->error));
$stmt->execute() or handle_error("There was a problem getting the recent posts.", "execute failed :".htmlspecialchars($stmt->error));
$stmt->bind_result($date,$title,$path,$image_path) or handle_error("There was a problem getting the recent posts.", "bind_result failed :".htmlspecialchars($stmt->error));
while($stmt->fetch()) {
$formatted_date = date('F j, Y', strtotime($date));
$results .= '<a href="'.$path.'" class="recent"><h4 class="home-head">'.$formatted_date.':<br>'.$title.'</h4><img src="'.$image_path.'" class="no-border"></a>';
}
echo $results;
?>
この構成では、動作します。ただし、homePageLink.php で databaseConnection.php コードを繰り返しています。しかし、homePageLink.php からこのコードを削除するたびに
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
if ($mysqli->connect_errno) {
handle_error("There was a problem connecting to the database that holds the information we need to get you connected.", "Failed to connect to MySQL: (".$mysqli->connect_errno.") ".$mysqli->connect_error);
}
それは動作しません。削除すると、mysqli の準備が失敗します。しかし、エラーメッセージはありません。なぜうまくいかないのかわかりません。面白いのは、他のファイルで私が望むように機能していることです。クエリと出力以外に違いはありません。