テスト目的で2つのレコードを持つデータベースがあります...データベース列(user_id、username、password、およびrole)...
PHPPDOを使用してデータベースと通信しています。以下のPDOを拡張するクラスファイルを作成しました。
<?php
require_once('constants.php');
class PDOConfig extends PDO{
private $real_escape_string;
private $mageic_quote_active;
public function __construct(){
$dsn = DBENGINE .':dbname='. DBNAME.";host=".DBHOST;
parent::__construct($dsn, DBUSER, DBPW);
$mageic_quote_active = get_magic_quotes_gpc();
$real_escape_string = function_exists("mysql_real_escape_string");
}
public function escapeValue($value){
//PHP >= 4.3.0 or greater
if($this->real_escape_string){
if($this->mageic_quote_active){
//if new version exists turn magic quotes off
$value = stripslashes($value);
}
$value = mysql_real_escape_string($value);
}
return $value;
}
}//end of class
$connection = new PDOConfig();
$database =& $connection;
私は次のコードを持っている私のログインページでこのファイルを使用しています
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sign In</title>
<link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/singin-form.css">
<?php require_once('includes/PDOConfig-class.php'); ?>
<?php //require_once('includes/utility-functions.php'); ?>
<?php
$errors = "";
if(isset($_POST['submit'])){
$username = trim($_POST['username']);
$password = trim($_POST['password']);
if(!empty($username) && !empty($password)){
$sql = "SELECT * FROM user WHERE user_name = '" . $database->escapeValue($username) . "'";
$prestmt = $database->prepare($sql);
$prestmt->execute();
$result = $prestmt->fetch($database::FETCH_ASSOC);
//print_r($result);
echo $result['role'];
echo "<br /> Query : " . $sql;
}
//echo '<div class="alert alert-error">something wrong<button type="button" class="close" data-dismiss="alert">×</button></div>';
}
?>
</head>
<body>
<div class="container">
<form class="form-signin" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<h2>Please sign in</h2>
<input type="text" name="username" class="input-block-level" placeholder="User Name" />
<input type="password" name="password" class="input-block-level" placeholder="Password" />
<button name="submit" class="btn btn-primary btn-large" type="submit">Login</button>
</form>
</div>
</body>
</html>
しかし、データベースにデータがありますが、印刷したクエリ以外にページに何も表示されません...
「FETCH_OBJ」を使用しようとすると、次のエラーが発生します。
trying to get property of non-object in C:\wamp\www\testPHP\login.php on line 30
上記のエラーを生成するコードは以下のとおりです
if(!empty($username) && !empty($password)){
$sql = "SELECT * FROM user WHERE user_name = '" . $database->escapeValue($username) . "'";
$prestmt = $database->prepare($sql);
$prestmt->execute();
$result = $prestmt->fetch($database::FETCH_OBJ);
echo $result->role;
}
私はPHPPDOを使用したことがなく、phpがあまり得意ではないので、助けてください...ありがとうございました