[解決済み] 致命的なエラー メンバ関数 prepare() の NULL での呼び出し
2022-02-18 13:38:39
質問
Registration で email が既に使用されているかどうかを確認しようとしています。学校で作業していたときはうまくいっていたのですが、今は突然エラーが表示されます。
致命的なエラーです。メンバ関数prepare()のnullでの呼び出し
を含めるために使用しています。
define("dbserver", "localhost");
define("dbuser", "user");
define("dbpass", "");
define("dbname", "user");
$db = new PDO(
"mysql:host=" .dbserver. ";dbname=" .dbname,dbuser,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
) );
この中に
session_start();
include "DBjoin.php";
if(isset($_POST["email"])) {
$_SESSION['email'] = $_POST["email"];
}
if(isset($_POST["nick"])) {
$_SESSION['nick'] = $_POST["nick"];
}
if(isset($_POST["pass"])) {
$_SESSION['pass'] = $_POST["pass"];
$_SESSION['pass'] = base64_encode($_SESSION['pass']);
}
$sthandler = $db->prepare("SELECT Email FROM Registrace WHERE Email = :email");
$sthandler->bindParam(':email', $_SESSION['email']);
$sthandler->execute();
if(filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL)) {
if($sthandler->rowCount() > 0){
echo "Email is used";}
解決方法は?
編集する。 (解った)。
あなたのコードが動作しない理由がようやくわかり、私の最初の回答が当てはまらなくなったので、抹消しました。
接続がうまくいかない理由は、接続の際に
dbpass
定数を接続パラメータから削除してください。
$db = new PDO(
"mysql:host=" .dbserver. ";dbname=" .dbname,dbuser,dbpass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
) );
-
パスワードが設定されていない場合でも、パラメータの一部として必要です。
当初の回答、当てはまらなくなりました。(上記の編集を参照)。
<ストライク ちなみに、努力の甲斐あって、このエラーを再現することはできませんでした。
<ストライクしかし、これをいじった結果、PDO ( 少なくとも、私のサーバーにあるものは を使用することはできません。 定数 は、DSN の最初の 2 つのパラメータとして使用されます。
補足 もし、あなたが言うことがあなたの学校でうまくいったのなら、私の知らない設定が使われているかもしれませんね。
ただし、定数に変数を代入して、その変数をDSNで使用することはできます。
$servername = "localhost";
$dbname = "user";
define("dbuser", "user");
define("dbpass", "");
$dsn = "mysql:host=$servername;dbname=$dbname";
$username = dbuser; // variable equals constant
$password = dbpass; // variable equals constant
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
);
$db = new PDO($dsn, $username, $password, $options);
PDO接続の詳細については、こちらをご覧ください。
<ストライク
追加 エラー報告 をファイルの先頭に追加することで、エラーを発見しやすくなります。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
参考までに エラーレポートはステージングでのみ行うべきで、プロダクションでは決して行わないでください。
関連
-
[解決済み】Notice: 非オブジェクトのプロパティを取得しようとしているエラー
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み】++と*+の意味は何ですか?
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み】Netbeans 7.4 for PHPで「スーパーグローバルな$_POST配列に直接アクセスしないでください」という警告が発生する。
-
[解決済み] Uncaught SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み] PHP 未定義関数への呼び出し
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】接続の取得に失敗しました: php_network_getaddresses: getaddrinfo failed: 名前またはサービスが不明
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み】PHP定数「PHP_EOL」はいつ使うの?
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません
-
[解決済み] PHP - ストリームを開くのに失敗しました : そのようなファイルまたはディレクトリがありません。
-
[解決済み】In_arrayが動作しない。