PDA

View Full Version : مبتدی : خطا در ارتباط به بانک



keiv@n
پنج شنبه 23 اردیبهشت 1395, 12:00 عصر
سلام دوستان
من حدود 2 روز هستش که دارم php رو یاد میگیرم ، برنامه هایی که نصب کردم : mysql , php , wampServer

یک صفحه تستی ارتباط با بانک mysql نوشتم :


<?php
/**
* Created by PhpStorm.
* User: Keivan
* Date: 5/12/2016
* Time: 10:56 AM
*/
$servername = "localhost";
$username = "root";
$password = "******";
$dbname = "doctorsContact";


// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>



و اینکه کانفیگ فایل php.ini رو هم تنظیم کردم و قسمت های extension_dir رو به مسیر C:\Php\ext و خود mysqli.dll رو unComment کردم
خطایی که نشونم میده :


Fatal error: Uncaught Error: Class 'mysqli' not found in E:\Php_Projects\DoctorsContact\Home.php:14 Stack trace: #0 {main} thrown in E:\Php_Projects\DoctorsContact\Home.php on line 14


اگر امکانش هست تیم ویوور میدم دوستان وصل بشن و مشکل رو حل کنند
پیشاپیش تشکر از پاسخ دوستان

rambod18
پنج شنبه 23 اردیبهشت 1395, 12:37 عصر
از دستور mysql_connect() استفاده کنید

keiv@n
پنج شنبه 23 اردیبهشت 1395, 13:24 عصر
ادیتورم روی این متد خط میکشه و میگه Function MySql_Connect is Deprecated فکر کنم بجاش MySqli رو قرار دادند جدیدا !

پیام حیاتی
پنج شنبه 23 اردیبهشت 1395, 13:35 عصر
سلام کوین جان خوش اومدی به PHP
من حدود 3 ماهه شروع کردم با PhpStorm و mysqli کار نکردم ، ولی یک نمونه کدیی که دارم استفاده می کنم و جواب داده رو برات قرار میدم :


<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>insert data</title>
</head>


<body>


<?php
/*
if(!isset($_POST['go'])){
echo "<script type=\"text/javascript\">alert('Fill All');</script>";
header('Refresh: 3; URL=register.php');
}

*/

/*
if(!isset($_POST['go'])){
echo "<script type=\"text/javascript\">alert('Fill All');</script>";
header('location:goback.php');
}
*/
$name=$_REQUEST['txtname'];
$email=$_REQUEST['txtemail'];
$pass=$_REQUEST['txtpass'];
$pass=$_REQUEST['txtpass'];
$address=$_REQUEST['txtaddress'];
if($name && $email && $pass)
{
mysql_connect("localhost", "root", "")or die("Couldn't connect!");
mysql_select_db("user");

//Check Email for exist or not exist
$emailchk=mysql_query("SELECT email FROM info WHERE email='$email' ");
$count=mysql_num_rows($emailchk);
if($count!=0){
die("Email already exists!");

}

mysql_query("INSERT INTO info(name,email,pass,address) VALUES('$name', '$email', '$pass', '$address')");
$reg=mysql_affected_rows();
echo $reg;
}
else
{
"You have Fill All Field!";
}
?>


<a href="register.php">Go Back</a>


</body>
</html>

خیلی ها میگن باید mysqli یا pdo استفاده کنید دیگه ، چون در ورژن های جدید PHP توابع mysql پشتیبانی نمی شوند ، ما گفتیم همین ورژن 5 تقریبا همه کارها رو راه می ندازه و تا الان مشکلی باهاش نداشتم:ِD

rambod18
پنج شنبه 23 اردیبهشت 1395, 13:44 عصر
<?php
con = mysqli_connect($servername,$username,$password,$db name);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>

keiv@n
پنج شنبه 23 اردیبهشت 1395, 14:47 عصر
مشکل از ریستارت نکردن بعد از عملیات پایین بود : (

ravand
جمعه 24 اردیبهشت 1395, 08:48 صبح
خیلی ها میگن باید mysqli یا pdo استفاده کنید دیگه ، چون در ورژن های جدید PHP توابع mysql پشتیبانی نمی شوند ، ما گفتیم همین ورژن 5 تقریبا همه کارها رو راه می ندازه و تا الان مشکلی باهاش نداشتم:ِD

خب دلیل دگه اش اینه که دستورات mysql امنیت ندارن. برا همینه گفتن برید سراغ pdo.البته میشه دستورات mysql را هم امن کرد. ولی خب نیازی به این همه دنگ و فنگ نیست .

Unique
جمعه 24 اردیبهشت 1395, 11:25 صبح
خب دلیل دگه اش اینه که دستورات mysql امنیت ندارن.
این همه سال ازشون استفاده میشد و امن هستند ! علت Deprecate شدنش کنتبخونه mysqli بود که بهینه شده کتابخونه mysql هست و شی گرایی را پشتیبانی میکنه. همین.


میشه دستورات mysql را هم امن کرد.
دستورات امن هستند ! اینکه ورودی ها را کنترل کنیم و با escape کردن مانع از SQL Injection بشیم در واقع توی همه زبان ها و Component هاشون وجود داره. mysqli هم در صورت عدم از استفاده از Prepared Statement ها که به صورت Parameterized Query هستند این مشکل را بالقوه داره یعنی اگه query خودت بزنی و escape نکنی بازم Inject میخوری‌!

ravand
جمعه 24 اردیبهشت 1395, 14:47 عصر
این همه سال ازشون استفاده میشد و امن هستند ! علت Deprecate شدنش کنتبخونه mysqli بود که بهینه شده کتابخونه mysql هست و شی گرایی را پشتیبانی میکنه. همین.


دستورات امن هستند ! اینکه ورودی ها را کنترل کنیم و با escape کردن مانع از SQL Injection بشیم در واقع توی همه زبان ها و Component هاشون وجود داره. mysqli هم در صورت عدم از استفاده از Prepared Statement ها که به صورت Parameterized Query هستند این مشکل را بالقوه داره یعنی اگه query خودت بزنی و escape نکنی بازم Inject میخوری‌!
منظور منم همین بود!
من خودم قبلا برای امنیت دستورات mysql می امدم از چنین دستوراتی استفاده میکردم:

function quote_smart($value)
{
if(!is_numeric($value)) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
return mysql_real_escape_string($value) ;
}
else return $value;
}
$valuei=quote_smart($_GET['id']);



if((!isset($_GET["id"])) or ($_GET["id"]=="") or (!is_numeric($_GET["id"]))){
header("Location:404.php");
exit;
}else{
$id =$_GET['id'];
}

ولی خب فکر میکنم pdo ساده تره.
اینم pdo :

<?php
if(isset($_GET['tag'])){
$tag=$_GET['tag'];
try {
$dbh = new PDO('mysql:host=localhost;dbname=ravandi','root',' ');
$dbh->exec("SET CHARACTER SET utf8");
$sth = $dbh->prepare("select * from `jadvali` where tag=:tag ");
$sth->bindvalue(":tag",$tag, PDO::PARAM_STR);
$sth->execute();
foreach($sth as $row) {
echo $row['name']."<br/>";
echo $row['lastname']."<br/>";
}
$dbh = null;
}catch(PDOException $e){
die();
}
}
?>