MySQLのベースに書かれたプログラムをMariaDBで動かす場合
https://itport.cloud/?p=7951
のサイトには
[PHPでSNSを作成してみる]の現在第1回〜第3回
まであり、ブラッシュアップしていくそうです。
冒頭のURL先の
(第1回)PHPでSNSを作成してみる
https://itport.cloud/?p=7914
に書かれています、環境は
----------------------------------
環境設定
OS
1 Windows10(64bit)
2 Webサーバー
Apache/2.4.41 (Win64)
3 PHPバージョン
7.2.21
4 DB(MySQL) 8.0.17 for Win64
-----------------------------------------
です。
しかし私の環境は
-------------------------------
@ OSはWindows10 64bit
A XAMPP
Control Panel v3.2.2
※詳しい環境は一番下にあります。
---------------------------------
以上ですが!
環境が異なります。
大きな違いは
DB(MySQL)
Mariadb
です。
冒頭にサイトの第2回
https://itport.cloud/?p=7951
にありますプログラムは以下ですが
私のパソコンでは2か所エラーになり、内容は
以下のプログラムの最後にあります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>BBS</title>
</head>
<body>
<h1>BBS</h1>
<form action="bbs.php"
method="post">
名前: <input type="text" name="name" /><br>
内容: <input type="text" name="comment"
size="60" /><br>
<input type="submit" name="submit" value="送信" />
</form>
<?php
//DBに接続
$mysql = mysqli_connect('localhost',
'root', 'AoFLS030cztQMGzd6i3e', 'fp_bbs');
mysqli_set_charset($mysql,
'utf8');
if (!$mysql) {
exit('DB接続エラー');
}
//DBの選択
$result = mysqli_select_db($mysql, 'fp_bbs');
if (!$result) {
exit('DB選択エラー');
}
$errors = array();
//POSTなら保存処理
if($_SERVER['REQUEST_METHOD'] === 'POST') {
//名前のチェック
$name = null;
//名前がnullでないことをチェック
if(!isset($_POST['name']) || !strlen($_POST['name'])) {
$errors['name'] = '名前を入力してください';
} else if (strlen($_POST['name']) > 40) {
$errors['name'] = '名前は40文字以内で入力してください';
} else {
$name =
$_POST['name'];
}
//コメントのチェック
$comment = null;
//名前がnullでないことをチェック
if(!isset($_POST['comment']) || !strlen($_POST['comment'])) {
$errors['comment'] = 'コメントを入力してください';
} else if (strlen($_POST['comment']) > 200)
{
$errors['comment'] = 'コメントは200文字以内で入力してください';
} else {
$comment = $_POST['comment'];
}
//エラーがなければ保存
if (count($errors) === 0) {
//保存するためのSQL分を作成
$sql ='INSERT INTO post(Pname,
comment, created_day)VALUES("'
.mysqli_real_escape_string($mysql, $name).'","'
.mysqli_real_escape_string($mysql, $comment).'",\''
.date('Y-m-d H:i:s').'\')';
//保存する
mysqli_query($mysql,
$sql);
}
}
?>
</body>
</html>
以上のエラー内容は以下です。
Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)
in
C:\xampp\htdocs\YPHPSample\SNS\Untitled-2.php on line 16
Warning: mysqli_set_charset() expects parameter 1 to be mysqli, boolean given in
C:\xampp\htdocs\YPHPSample\SNS\Untitled-2.php on line 17
DB接続エラー
特に気になるのが
プログラムの
mysqli_set_charset($mysql, 'utf8');
に対して
警告:mysqli_set_charset()は、パラメーター1がmysqliであることを期待しています。
ブール値は、C:\ xampp \ htdocs
\ YPHPSample \ SNS \ Untitled-2.phpの17行目に指定されています。
〜
パラメータと出ていますので仕様の違い有ですね!?
ここが問題だと思います。
※A XAMPP
Control Panel v3.2.2
の仕様は以下です。
-------------------------------------------
データベースサーバ
サーバ:
127.0.0.1 via TCP/IP
サーバの種類:
MariaDB
サーバの接続: SSL
is not being used ドキュメント
サーバのバージョン:
10.1.36-MariaDB - mariadb.org binary distribution
プロトコル バージョン:
10
ユーザ: root@localhost
サーバの文字セット:
UTF-8 Unicode (utf8)
--------------------------------------------------
ウェブサーバ
Apache/2.4.34
(Win32) OpenSSL/1.1.0i PHP/7.2.10
データベースクライアントのバージョン: libmysql - mysqlnd
5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
PHP 拡張: mysqliドキュメント curlドキュメント mbstringドキュメント
PHP のバージョン: 7.2.10
--------------------------------------------------
phpMyAdmin
バージョン情報:
4.8.3, 最終安定バージョン: 4.9.5
ドキュメント
phpMyAdmin オフィシャルサイト
phpMyAdmin に協力するには
サポート
更新履歴
ライセンス
------------
以上