私はMySQLとPHPにかなり慣れていないので、我慢してください。いくつかの調査の結果、私の悩みの種は、明らかに私のサイトがPDOをサポートしていないGoDaddy上のWindowsサーバー(デフォルト)でホストされていることを発見しました。
最近、投稿した別の質問からの推奨により、すべてのデータベース呼び出しをプリペアドステートメントを使用するように切り替えました。これらが実行されておらず、厄介なエラーが発生していることがわかりました。
Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in D:\Hosting\8446415\html\ROOTFOLDER\php\Connect.php:8
Stack trace: #0 D:\Hosting\8446415\html\ROOTFOLDER\php\Connect.php(8): PDO->__construct('mysql:host=HOSTNAME', 'DBNAME', 'PASSWORD')
#1 D:\Hosting\8446415\html\ROOTFOLDER\admin.php(67): Connect->connect()
#2 {main} thrown in D:\Hosting\8446415\html\ROOTFOLDER\php\Connect.php on line 8
Connect.phpは次のとおりです。
<?php
class Connect {
const expAddress = "HOSTNAME";
const expUser = "USERNAME";
const expPwd = "PASSWORD";
function connect() {
$db = new PDO('mysql:host='.self::expAddress.';dbname='.self::expUser.';charset=UTF-8', self::expUser, self::expPwd);
if(!$db) {
die("<p>Could not establish a connection to the database.</p>");
include('footer.php');
}
else {
return $db;
}
}
}
?>
では、ここでの修正は何ですか?何がサポートされているのかわかりません。すべてのmysql_*ステートメントを避けるように言われました。
ホスティングアカウントをLinuxにアップグレードするのは簡単ですが、アップグレードできません。mysqli_ *ステートメントを使用する必要がありますか?入力がインジェクションから安全になるように、この特定の呼び出しはどのように変更されますか?
$stmt = $db->prepare("SELECT * FROM logins WHERE username=? AND password=?");
$stmt->execute(array($user, $pass));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);