با سلام
من دارم پروژه را از اول مرور می کنم و چند تغییر مختصر دادم
4 تا فایل دیتابیس, ساخت جدول, ادمین و index.php را ساختم
بجای شروع از category
با کلاس Auth شروع کردم
این کلاس هم ساختم و فایل login , register هم ساختم
یه یوزر بطوردستی اضافه کردم ادمین
حالا وقتی می خواهم رجیستر یا لاگین کنم
آین خطا رو میده
Fatal error: Call to a member function prepare() on null in C:\Program Files (x86)\Ampps\www\Review\Dashboard\DB.php on line 39
در واقع داره به کوئری من ایراد وارد میکنه
دقیقا به خطی که با ستاره مشخص کردم ایراد میگیره
public function select($sql,$values=null)
{
try{
//display * table
if($values==null){
return $result=$this->conn->query($sql);
}
// display special table
else{
* $stmt=$this->conn->prepare($sql);
$result=$stmt->execute($values);
return $result;
}
}
catch(PDOException $e){
echo "There is wrong in select method in Database <br>". $e->getMessage();
return false;
}
}
مقدار sql$ ورودی آن
C:\Program Files (x86)\Ampps\www\Review\Dashboard\DB.php:37:string 'SELECT * FROM `users` WHERE `email`=?;' (length=38)
مقدار values$ ورودی
C:\Program Files (x86)\Ampps\www\Review\Dashboard\DB.php:37:string 'massih.eydavi@gmail.com' (length=23)
دیتابیس را چک کردم وصل میشه
مشکل میتونه کجا باشه؟
کوئری داخل کلاس Auth
$user = $db->select("SELECT * FROM `users` WHERE `email`=?;", [$request['email']])->fetch();
با سلام خدمت شما همراه عزیز
نمیشه حدس زد ولی هربخشی که مربوط میشه به کوئری select باید چک کنید خطای سینتکسی میتونه باشه
بله حق با شماست
حدس من اینه نمی تونم به دیتابیس وصل بشم بخاطر همین کوئری خطا میده
آیا این شکل تعریف دیتابیس درست است؟
<?php
namespace DataBase;
use PDO;
use PDOException;
//define constant
define('DB_HOST','localhost');
define('DB_NAME','blog');
define('DB_USER','root');
define('DB_PASSWORD','mysql');
class DataBase{
// private $option =[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION , PDO::ATTR_DEFAULT_FETCH_MODE=> PDO::FETCH_ASSOC , PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"];
//connect to database
function __construct()
{
try{
$conn=new PDO("mysql:host=".DB_HOST ."; dbname=".DB_NAME,
DB_USER,
DB_PASSWORD,
$this->option);
}
catch(PDOException $e){
echo 'There is Error for Connecting to Database ....!!! <br>'. $e->getMessage();
}
}
// operation CRUD
public function select($sql,$values=null)
{
try{
//display * table
if($values==null){
return $result=$this->conn->query($sql);
}
// display special table
else{
$stmt=$this->conn->prepare($sql);
var_dump($stmt);
die;
$result=$stmt->execute($values);
return $result;
}
}
catch(PDOException $e){
echo "There is wrong in select method in Database <br>". $e->getMessage();
return false;
}
}
public function insert($tableName,$fields,$values)
{
try{
$stmt=$this->conn->prepare("INSERT INTO `".$tableName."`(".implode(',',$fields).", `created_at`)VALUES (:".implode(',:',$fields).", now();");
$stmt->execute(array_combine($fields,$values));
return true;
}
catch(PDOException $e){
echo "There is wrong in Insert method in Database <br> ".$e->getMessage();
return false;
}
}
public function update($tableName,$id,$fields,$values)
{
$sql="UPDATE `".$tableName."`SET";
foreach(array_combine($fields,$values) as $field=>$value){
if($value){
$sql.="`".$field."`=?";
}
else{
$sql.="`".$field."`= NULL";
}
}
$sql.=", `updated_at` =now() WHERE `id`=?";
try{
$stmt=$this->conn->prepare($sql);
$stmt->execute(array_merge(array_filter(array_values($values)),[$id]));
return true;
}
catch(PDOException $e){
echo "There is wrong in Update method in Database <br>".$e->getMessage();
return false;
}
}
public function delete($tableName,$id)
{
$sql="DELETE FROM `".$tableName."` WHERE `id`=?;";
try{
$stmt=$this->conn->prepare($sql);
$stmt->execute($id);
return true;
}
catch(PDOException $e){
echo "There is wrong in Delete method in Database <br> ".$e->getMessage();
return false;
}
}
}
?>
اگربه دیتابیس وصل نشید خب میوفته توی
catch
و خطارو نشون میده
کلا برای خودم یه کلاس مجزا تعذیف کردم خواستم وصل بشم به دیتابیس و اطلاعات رو بگیرم
<?php
namespace DataBase;
use PDO;
use PDOException;
class DataBase{
private $connection;
private $option = array(PDO::ATTR_ERRMODE=> PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
private $dbHost= "localhost";
private $dbName= "blog";
private $dbUsername="root";
private $dbPassword = "mysql";
function __construct()
{
try{
$this->connection = new PDO("mysql:host=".$this->dbHost.";dbname=".$this->dbName,$this->dbUsername,
$this->dbPassword,$this->option);
}
catch (PDOException $e){
echo "<div style='color:red;'> There is some problem in connection :</div>". $e->getMessage();
}
}
}
$db=new DataBase();
$db=$conn->query("SELECT * FROM `users` WHERE `email`='massih.eydavi@gmail.com' ;");
وقتی فراخوانی میکنم دقیقا همون خطای بالا رو میده
Fatal error Call to a member function prepare() on null
ولی وقتی مستقیم تو phpmyadmin این کوئری را میزنم دقیقا جوابو برمی گردونه
SELECT * FROM `users` WHERE `email`='massih.eydavi@gmail.com'
از نوع private تعریف نکنید
نکته خوبی بود گفتید
ممنون
ولی تاثیر نداشت
همون خطا پابرجاست
دقیقا همون کدهایی که ما در دوره پیشرفته زدیم رو بزنید
بله با این کدها مشکل رفع شد
ممنون
سلامت باشید