0

私は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);
4

2 に答える 2

1

インストール済みであることを確認する必要がありますpdo_mysql。チェックphpinfo()してくださいpdo_mysql...インストールされていることがわかっている場合はextension=php_pdo_mysql.dll、php.iniのコメントを外す必要があるかもしれません...

作成エラーをキャッチして適切に表示するには、次のようにコードを変更します。

try{
    $db = new PDO('mysql:host='.self::expAddress.';dbname='.self::expUser.';charset=UTF-8', self::expUser, self::expPwd);
} catch (PDOException $e) {
    die('Connect Failed: ' . $e->getMessage());
}

return $db;
于 2012-07-13T16:19:03.220 に答える
1

php.iniにアクセスできる場合は、次の行にコメントが付いていないことを確認してください。

extension_dir = "ext"
于 2014-04-29T09:06:48.287 に答える