mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows ইত্যাদি… প্যারামিটার 1 রিসোর্স হওয়ার প্রত্যাশা করে


959

আমি একটি মাইএসকিউএল টেবিল থেকে ডেটা নির্বাচন করার চেষ্টা করছি, তবে আমি নিম্নলিখিত ত্রুটি বার্তাগুলির মধ্যে একটি পেয়েছি:

mysql_fetch_array () প্যারামিটার 1 রিসোর্স হিসাবে প্রত্যাশা করে, বুলেট দেওয়া হয়েছে

এটি আমার কোড:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

while($row = mysql_fetch_array($result)) {
    echo $row['FirstName'];
}

15
আপনি আরও কার্যকর ইরুর ছবিটি ব্যবহার করতে পারেন :: QUERY ব্যবহার করে বা ডাই (মাইএসকিএল_আরর ()) ব্যবহার করে;
নিক

123
এছাড়াও বাধ্যতামূলক নোট: আপনার কোডটি এসকিউএল ইঞ্জেকশন প্রবণ । আপনার বৈধতা এবং / অথবা ব্যবহারকারীর ইনপুটটি এড়ানো উচিত। একবার দেখুন mysql_real_escape_stringব্যবহারকারীর ডেটা বিশ্বাস করবেন না।
ফেলিক্স ক্লিং

7
প্রকৃতপক্ষে, ওপির কোডটি মাইএসকিউএল সার্ভারে একটি সিনট্যাক্স ত্রুটি ঘটাবে, তবে কমপক্ষে এটি এসকিউএল ইঞ্জেকশনের পক্ষে ঝুঁকিপূর্ণ নয় কারণ একক উদ্ধৃতিতে ভেরিয়েবল ইন্টারপোলেশন নেই।
szgal

4
@ ফেলিক্সকলিং আমি বুঝতে পেরেছি যে এটি অনেক পুরানো, এবং সম্ভবত এটি সবচেয়ে সম্ভবত সঠিক, তবে আপনার মন্তব্যটি এখন একরকমভাবে বিপজ্জনকভাবে ভুল: mysql_real_escape_stringএসকিউএল ইঞ্জেকশন সুরক্ষার সবকটিই শেষ নয়; এটি এখনও বেশ কয়েকটি আক্রমণে ঝুঁকিপূর্ণ। (না, আপনি কখনই এটি নিখুঁত বলেননি, তবে আপনি বোঝাচ্ছেন এটিই ছিল একমাত্র প্রয়োজনীয় সমাধান) এখন পর্যন্ত সর্বোত্তম সমাধানটি PDO, যতদূর আমি জানি।
তহবিল মনিকার লসুইট

2
গাহ। এই প্রশ্নটি মাইএসকিউএল এবং পিডিওতে অন্তর্ভুক্ত করা একটি খারাপ ধারণা ছিল। তাদের প্রত্যেকের নিজস্ব কিছু আলাদা আলাদা বাক্য গঠন এবং ত্রুটি বার্তা রয়েছে এবং তারা পুরোপুরি ভাল তাদের নিজস্ব প্রশ্ন থাকতে পারে। সমস্ত কিছুকে এক বিশাল তিন ভাগের প্রশ্নের সাথে সংমিশ্রণ কেবল এটিকে কম গুগলযোগ্য করে তোলে এবং এখানে যারা আগত তাদেরকে অপ্রাসঙ্গিক সামগ্রীর মাধ্যমে তারা কী চান তা পেতে বাধ্য করে। এটি নীচের অনেকগুলি উত্তরকেও অবৈধ করে তুলেছে এবং আমরা সাধারণত যে মানক প্রয়োগ করি সেগুলি দ্বারা এই প্রশ্নটিকে "খুব ব্রড" করে তোলে। এটা আমার মতে একটা গোলমাল, তবে এখনই ঠিক করতে দেরি হয়ে গেছে।
মার্ক আমেরিকা

উত্তর:


667

কোনও জিজ্ঞাসা বিভিন্ন কারণে ব্যর্থ হতে পারে যার ক্ষেত্রে মাইএসকিএল_ * এবং মাইএসকিলি এক্সটেনশন উভয়ই falseতাদের নিজ নিজ ক্যোয়ারী ফাংশন / পদ্ধতি থেকে ফিরে আসবে। আপনাকে সেই ত্রুটি শর্তটির জন্য পরীক্ষা করতে হবে এবং সেই অনুযায়ী এটি পরিচালনা করতে হবে।

mysql_ * এক্সটেনশন :

নোট mysql_ ফাংশন অবচিত হয় এবং পিএইচপি সংস্করণ 7 সরানো হয়েছে।

$resultএটি পাস করার আগে পরীক্ষা করুন mysql_fetch_array। আপনি দেখতে পাবেন যে এটি falseকারণ ক্যোয়ারী ব্যর্থ হয়েছে। mysql_queryসম্ভাব্য রিটার্ন মান এবং সেগুলি কীভাবে মোকাবেলা করতে হয় তার পরামর্শগুলির জন্য ডকুমেন্টেশন দেখুন ।

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

mysqli এক্সটেনশন
পদ্ধতিগত শৈলী :

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo- শৈলী :

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

একটি প্রস্তুত বিবৃতি ব্যবহার:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

এই উদাহরণগুলি কেবল কী করা উচিত তা ব্যাখ্যা করে (ত্রুটি পরিচালনা করা), কীভাবে এটি করা যায় না। or dieএইচটিএমএল আউটপুট দেওয়ার সময় উত্পাদন কোড ব্যবহার করা উচিত নয় , অন্যথায় এটি (খুব কমপক্ষে) অবৈধ এইচটিএমএল তৈরি করবে। এছাড়াও, অ-অ্যাডমিন ব্যবহারকারীদের কাছে ডাটাবেস ত্রুটি বার্তা প্রদর্শন করা উচিত নয়, কারণ এটি অত্যধিক তথ্য প্রকাশ করে


9
ঠিক আছে, তবে কোয়েরিটি যদি কিছুটা ব্যর্থ হয় তবে ডাই () ব্যবহার করুন।
য়কাউবয়

28
আমি ওপির জন্য একটি সম্পূর্ণ ত্রুটি পরিচালনা করার পদ্ধতিটি ডিজাইন করতে যাচ্ছিলাম, তবে সিদ্ধান্ত নিয়েছি যে এটি আমার উত্তরের বাইরে beyond
এডওয়ার্ড ডেল

@ scompt.com হ্যাঁ এটি অন্যান্য বেশ কয়েকটি উত্তরেও আচ্ছাদিত। আমি অনুমান করি যে আমি কেবল এটিই বলছিলাম যেহেতু ভবিষ্যতে ত্রুটিগুলি সঠিকভাবে কীভাবে ধরা যায় সে সম্পর্কে (চমৎকার) পরামর্শ ছাড়াও এটি একটি উচ্চ দৃশ্যমানতার প্রশ্নে গৃহীত উত্তর, সুতরাং (আইএমএইচও) অবশ্যই নির্দিষ্ট প্রশ্নের উত্তর দেওয়া উচিত (যেমন) এই ক্ষেত্রে কেন ত্রুটি রয়েছে তা ব্যাখ্যা করুন )।
সেপ্টেম্বর

2
পরিবর্তে if($result === FALSE)আপনি ব্যবহার করতে পারেন if(! $result)। আমি ভুল হলে আমাকে সংশোধন করুন
anestv

1
mysql_query (): মাইএসকিএল এক্সটেনশানটি অবচিত করা হয়েছে এবং ভবিষ্যতে সরানো হবে: মাইএসকিলি ব্যবহার করুন
গ্রেগ

165

এই ত্রুটি বার্তাটি প্রদর্শিত হয় যখন আপনার ক্যোয়ারীতে কোনও ত্রুটি রয়েছে যা এটি ব্যর্থ হওয়ার কারণ ঘটেছে। এটি ব্যবহার করার সময় এটি প্রকাশিত হবে:

  • mysql_fetch_array/mysqli_fetch_array()
  • mysql_fetch_assoc()/mysqli_fetch_assoc()
  • mysql_num_rows()/mysqli_num_rows()

দ্রষ্টব্য : আপনার কোয়েরিতে কোনও সারি প্রভাবিত না হলে এই ত্রুটিটি উপস্থিত হয় না । কেবলমাত্র একটি অবৈধ বাক্য গঠন সহ একটি কোয়েরি এই ত্রুটিটি উত্পন্ন করবে।

সমস্যার সমাধানের পদক্ষেপ

  • আপনার ত্রুটিযুক্ত সমস্ত সার্ভার ত্রুটিগুলি প্রদর্শন করার জন্য কনফিগার করা আছে তা নিশ্চিত করুন। আপনি আপনার ফাইল উপরের অথবা আপনার কনফিগ ফাইলে এই স্থাপন দ্বারা এটা করতে পারেন: error_reporting(-1);। আপনার যদি কোনও সিনট্যাক্স ত্রুটি থাকে তবে এটি সেগুলি আপনাকে নির্দেশ করবে।

  • ব্যবহার mysql_error()mysql_error()আপনার কোয়েরিটি সম্পাদন করার সময় মাইএসকিউএল সম্মুখীন হওয়া কোনও ত্রুটি সম্পর্কে রিপোর্ট করবে।

    নমুনা ব্যবহার:

    mysql_connect($host, $username, $password) or die("cannot connect"); 
    mysql_select_db($db_name) or die("cannot select DB");
    
    $sql = "SELECT * FROM table_name";
    $result = mysql_query($sql);
    
    if (false === $result) {
        echo mysql_error();
    }
    
  • মাইএসকিউএল কমান্ড লাইন বা পিএইচপিএমআইএডমিনের মতো একটি সরঞ্জাম থেকে আপনার ক্যোয়ারী চালান । আপনার ক্যোয়ারিতে যদি সিনট্যাক্স ত্রুটি থাকে তবে এটি আপনাকে বলবে।

  • আপনার উদ্ধৃতিগুলি সঠিক কিনা তা নিশ্চিত করুন। ক্যোয়ারী বা একটি মানের চারপাশে একটি অনুপস্থিত উদ্ধৃতি কোয়েরিকে ব্যর্থ করতে পারে।

  • নিশ্চিত হয়ে নিন যে আপনি নিজের মূল্যবোধ থেকে দূরে চলেছেন। আপনার ক্যোয়ারীর উদ্ধৃতিগুলি কোয়েরিকে ব্যর্থ হতে পারে (এবং আপনাকে এসকিউএল ইঞ্জেকশনগুলির জন্য উন্মুক্ত রেখে দেয়)। mysql_real_escape_string()আপনার ইনপুট এড়াতে ব্যবহার করুন।

  • আপনি মিক্স mysqli_*এবং mysql_*ফাংশন না তা নিশ্চিত করুন । এগুলি একই জিনিস নয় এবং একসাথে ব্যবহার করা যাবে না। (আপনি যদি একটি বা অন্য স্টিকটি বেছে নিতে যাচ্ছেন mysqli_*। তবে নীচে দেখুন))

অন্যান্য টিপস

mysql_*ফাংশনগুলি নতুন কোডের জন্য ব্যবহার করা উচিত নয়। এগুলি আর রক্ষণাবেক্ষণ করা হয় না এবং সম্প্রদায়টি অবচয় প্রক্রিয়া শুরু করেছে । পরিবর্তে আপনি প্রস্তুত বিবৃতি সম্পর্কে শিখতে হবে এবং PDO বা মাইএসকিউএলআই ব্যবহার করুন । আপনি যদি সিদ্ধান্ত নিতে না পারেন তবে এই নিবন্ধটি চয়ন করতে সহায়তা করবে। যদি আপনি শিখতে আগ্রহী হন তবে এখানে ভাল পিডিও টিউটোরিয়াল রয়েছে


1
এই প্রশ্নটি আজ stackoverflow.com/q/43804651/1415724 এবং অন্যান্য অনুরূপ অন্যান্য ইদানীং দেওয়া হয়েছে; আমি মনে করি যে আপনার উত্তরটি আপডেট করে রাখা সার্থক হতে পারে যেমন "যে ত্রুটিটি mysql_query()/ mysqli_query($connection)ইত্যাদি দিয়ে কোয়েরিটি সম্পাদন না করার কারণেও হতে পারে " " ; চিন্তা ভাবনা আছে? যেহেতু এই প্রশ্নোত্তরের অন্য কোনও উত্তর এতে উল্লেখ করে না।
ফানকি চল্লিশ নাইনার

111

একক উদ্ধৃতি ( ') ব্যবহারের কারণে এখানে ত্রুটি ঘটেছে । আপনি আপনার ক্যোয়ারীটি এভাবে রাখতে পারেন:

mysql_query("
SELECT * FROM Users 
WHERE UserName 
LIKE '".mysql_real_escape_string ($username)."'
");

এটি mysql_real_escape_stringএসকিউএল ইঞ্জেকশন প্রতিরোধের জন্য ব্যবহার করছে। যদিও আমাদের পিএইচপি (পিএইচপি 5.5.0 এবং তারপরের) সংস্করণটির জন্য মাইএসকিউএল বা পিডিও_এমওয়াইএসকিউএল এক্সটেনশন ব্যবহার করা উচিত তবে পুরানো সংস্করণগুলির জন্য mysql_real_escape_stringএটি কৌশলটি করবে।


5
কেন কেবল স্ট্রিংয়ে ভেরিয়েবলটি রাখার পরিবর্তে স্ট্রিং কনটেনটেশনের সাথে শব্দ যোগ করবেন?
মাত্তেও রিভা

1
@ মাত্তিও রিভা হ্যাঁ, তবে আমি ভেবেছিলাম ভেরিয়েবলগুলি স্ট্রিং থেকে আলাদা করার জন্য এটি খুব পরিষ্কার উপায়। :)
নিক

60

Scompt.com যেমন ব্যাখ্যা করেছে , ক্যোয়ারী ব্যর্থ হতে পারে। কোয়েরির ত্রুটি বা সঠিক ফলাফল পেতে এই কোডটি ব্যবহার করুন:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query("
SELECT * FROM Users 
WHERE UserName LIKE '".mysql_real_escape_string($username)."'
");

if($result)
{
    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
} else {
    echo 'Invalid query: ' . mysql_error() . "\n";
    echo 'Whole query: ' . $query; 
}

আরও তথ্যের জন্য ডকুমেন্টেশনmysql_query() দেখুন ।

আসল ত্রুটিটি একক উদ্ধৃতি ছিল যাতে ভেরিয়েবলটি $usernameবিশ্লেষণ করা যায় না। তবে আপনার mysql_real_escape_string($username)এসকিউএল ইঞ্জেকশনগুলি এড়াতে সত্যই ব্যবহার করা উচিত ।


52

চারপাশে উদ্ধৃতি রাখুন $username। সংখ্যার মানগুলির বিপরীতে স্ট্রিং মানগুলি অবশ্যই উদ্ধৃতিতে আবদ্ধ থাকতে হবে।

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

এছাড়াও, LIKEযদি আপনি ওয়াইল্ডকার্ড ব্যবহার না করেন তবে শর্তটি ব্যবহার করার কোনও মানে নেই : যদি আপনার =পরিবর্তে সঠিক ম্যাচের ব্যবহারের প্রয়োজন হয় LIKE


1
এবং যদি $ ব্যবহারকারীর নামটি হয়: "'; ড্রপ ট্যাবলেটগুলি;" ? প্রস্তুত স্টেটমেন্ট এবং সীমাবদ্ধ মানগুলি ব্যবহার করার সুবিধা এটিই যা আমি মনে করি যে প্রশ্নকারী তা ধরে রাখতে চাইবে।
হোল্ডঅফহাঙ্গার

42

একবার নির্বাচিত ডাটাবেস না হওয়ার কারণে একবার পরীক্ষা করুন কারণ কিছু সময় ডাটাবেস নির্বাচন করা হয় না

চেক

mysql_select_db('database name ')or DIE('Database name is not available!');

মাইএসকিউএল ক্যোয়ারীর আগে এবং তারপরে পরবর্তী ধাপে যান

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

f($result === FALSE) {
    die(mysql_error());

40

আপনার কোডটি এমন কিছু হওয়া উচিত

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM Users WHERE UserName LIKE '$username'";
echo $query;
$result = mysql_query($query);

if($result === FALSE) {
    die(mysql_error("error message for the user")); 
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

এটি একবার হয়ে গেলে, আপনি স্ক্রিনে মুদ্রিত ক্যোয়ারীটি পাবেন। আপনার সার্ভারে এই ক্যোয়ারীটি ব্যবহার করে দেখুন এবং এটি পছন্দসই ফলাফল উত্পন্ন করে কিনা। বেশিরভাগ সময় ত্রুটি কোয়েরিতে থাকে। কোডের বাকি অংশটি সঠিক।


3
এই কোড ব্যবহার করবেন না। এটি এসকিউএল ইঞ্জেকশন আক্রমণগুলির জন্য উন্মুক্ত।
ব্র্যাড

34
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

আপনি একক উদ্ধৃতি ব্যবহার করে স্ট্রিংটি সংজ্ঞায়িত করেন এবং পিএইচপি একক উদ্ধৃতি সীমাবদ্ধ স্ট্রিংকে পার্স করে না। ভেরিয়েবল ইন্টারপোলেশন পাওয়ার জন্য আপনাকে ডাবল কোটগুলি বা স্ট্রিং কনকন্টেশন (বা এর সংমিশ্রণ) ব্যবহার করতে হবে। আরও তথ্যের জন্য http://php.net/manual/en/language.types.string.php দেখুন ।

এছাড়াও আপনার এটি পরীক্ষা করা উচিত যে মাইএসকিএল_কিউরিটি কোনও বৈধ ফলাফলের সংস্থানটি ফেরত দিয়েছে, অন্যথায় আনার_ *, নাম_রোজ, ইত্যাদি ফলাফল হিসাবে কাজ করবে না! অর্থাৎ,

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

আরও তথ্যের জন্য http://us.php.net/manual/en/function.mysql-query.php


2
আপনি কোট যোগ করলেও এই কোডটি ব্যবহার করবেন না। এটি এসকিউএল ইঞ্জেকশন আক্রমণগুলির জন্য উন্মুক্ত।
ব্র্যাড

33

এই ক্যোয়ারিতে কাজ করা উচিত:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

সমস্যাটি একক উদ্ধৃতি, সুতরাং আপনার ক্যোয়ারী ব্যর্থ হয় এবং মিথ্যা প্রদান করে এবং আপনার WHILE লুপটি কার্যকর করতে পারে না। % ব্যবহার করা আপনাকে আপনার স্ট্রিং সমেত যে কোনও ফলাফলের সাথে মেলে ধরতে দেয় (যেমন সামারেক্সট- $ ব্যবহারকারীর নাম-সামারেক্সট)।

এটি কেবল আপনার প্রশ্নের উত্তর, আপনার অন্যান্য পোস্টে উল্লিখিত জিনিসগুলি প্রয়োগ করা উচিত: ত্রুটি পরিচালনা করা, এস্কেপ স্ট্রিংগুলি ব্যবহার করুন (ব্যবহারকারীরা ক্ষেত্রের মধ্যে কিছু টাইপ করতে পারেন, এবং আপনাকে অবশ্যই এটি নির্বিচারে কোড নয় তা নিশ্চিত করতে হবে), পরিবর্তে পিডিও ব্যবহার করুন mysql_connect যা এখন চিত্রিত হয়।


28
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'") or die(mysql_error());

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

কখনও কখনও হিসাবে জিজ্ঞাসা দমন @mysql_query(your query);


2
এই কোড ব্যবহার করবেন না। এটি এসকিউএল ইঞ্জেকশন আক্রমণগুলির জন্য উন্মুক্ত।
ব্র্যাড

27

আপনি যদি এখানে সবকিছু চেষ্টা করে থাকেন, এবং এটি কার্যকর না হয়, আপনি নিজের মাইএসকিউএল ডাটাবেস কোলেশন পরীক্ষা করতে চাইতে পারেন। আমার একটি সুইডিশ কোলেশনে সেট করা হয়েছিল। তারপরে আমি এটিকে পরিবর্তন করেছি utf8_general_ciএবং সবকিছু সবেমাত্র গিয়ারে ক্লিক করেছে।


25
$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4";

while( $data = mysql_fetch_array($query))
{
    echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

WHERE ক্যোয়ারী ব্যবহার না করে আপনি এই অর্ডার বাই ক্যোয়ারীটি ব্যবহার করতে পারেন। কোয়েরির ব্যবহারের জন্য এটি এর চেয়ে অনেক ভাল।

আমি এই ক্যোয়ারীটি করেছি এবং পরামিতি বা বুলিয়ানের মতো ত্রুটি পাচ্ছি না।


htmlspecialchars()এইচটিএমএল প্রসঙ্গে নির্বিচারে ডেটা ব্যবহার করার সময় ব্যবহার করতে ভুলবেন না। অন্যথায়, সংরক্ষিত অক্ষরগুলিতে ডেটা ব্যবহার করা হলে আপনি বৈধ এইচটিএমএল তৈরির ঝুঁকি নিতে পারেন।
ব্র্যাড

25

এটি চেষ্টা করুন, এটি অবশ্যই কাজ হওয়া উচিত, অন্যথায় আপনার সমস্যা নির্দিষ্ট করতে আপনাকে ত্রুটিটি মুদ্রণ করতে হবে

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con);

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

8
1) এসকিউএল ইঞ্জেকশনটির জন্য প্রশস্তভাবে খোলা, ২) ত্রুটি পরিচালনা করা অন্তর্ভুক্ত করে না যা ওপির ক্ষেত্রে ত্রুটি ঘটায়।
deceze

+1 টি। @ অনুগ্রহ করে হ্যাঁ এটি সম্পূর্ণ উন্মুক্ত। তবে এর চেয়ে বেশি নেই যে ওপি বা স্বীকৃত উত্তরদাতাদের কোড ;-) এবং এটি ওপি কোডটিতে ত্রুটি সৃষ্টি করার ক্ষেত্রে হ্যান্ডলিংয়ের অভাব নয় ... এটি ত্রুটি , এবং এই উত্তরটি কমপক্ষে সমাধান করার চেষ্টা করে (একক রেখে) আঙ্গিকের স্ট্রিংয়ের চারপাশে উদ্ধৃতিগুলি LIKE)।
সেপ্টেম্বর

1
+1 দয়া করে LIKE এবং '$ ব্যবহারকারীর নাম' এর মধ্যে একটি স্থান যুক্ত করুন, এসকিউএল ইঞ্জেকশন বাদে বিশ্রামটি ঠিক আছে বলে মনে হচ্ছে। LIKE অপারেটরের ব্যবহারকারীর নামটির পরিবর্তে = কেন ব্যবহার করবেন না
অসীম-ইসহাক

21

এর দুটি কারণ থাকতে পারে:

  1. আপনি কি mysql_query ফাংশন কল করার আগে ডাটাবেসের সাথে সংযোগটি খোলে? আমি আপনার কোড এ দেখতে পাচ্ছি না। কোয়েরি করার আগে mysql_connect ব্যবহার করুন। দেখাphp.net/manual/en/function.mysql-connect.php

  2. ভেরিয়েবল $ ব্যবহারকারীর নামটি একটি একক উদ্ধৃতি স্ট্রিংয়ের অভ্যন্তরে ব্যবহৃত হয়, সুতরাং এর মান কোয়েরির ভিতরে মূল্যায়ন করা হবে না। প্রশ্নটি অবশ্যই স্পষ্ট হবে।

তৃতীয়ত, ক্যোয়ারির কাঠামো এসকিউএল ইঞ্জেকশন প্রবণ । এই সুরক্ষা হুমকি এড়াতে আপনি প্রস্তুত বিবৃতি ব্যবহার করতে পারেন।


20

নিম্নলিখিত কোড ব্যবহার করে দেখুন। এটা ঠিক কাজ করতে পারে।

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName ='$username'");

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

4
এই কোডটি এসকিউএল ইঞ্জেকশনের সাপেক্ষে এবং এটি ব্যবহার করা উচিত নয়।
ব্র্যাড

15

আপনার যান config.php। আমারও একই সমস্যা ছিল। ব্যবহারকারীর নাম এবং পাসওয়ার্ড যাচাই করুন, এবং sql সিলেক্ট করুন কনফিগারেশনের একই নাম।


15

অঙ্কিত মাইএসকিএল_ * ফাংশনটি ব্যবহার করবেন না (পিএইচপি 5.5-এ বর্ণিত পিএইচপি 7 তে সরানো হবে)। এবং আপনি এটি mysqli বা pdo দিয়ে তৈরি করতে পারেন

এখানে সম্পূর্ণ নির্বাচন জিজ্ঞাসা

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

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

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        // code here 
    }
} else {
    echo "0 results";
}
$conn->close();
?>

আপনার পোস্টটি প্রশ্ন দ্বারা সম্বোধিত সমস্যাগুলির সাথে মোকাবিলা করে না, যা একটি অবৈধ ক্যোয়ারী এবং অসুবিধাজনিত ত্রুটি প্রতিবেদন। এই পোস্টটি বিষয় ছাড়াই।
পল স্পিগেল

14
<?php
    $username = $_POST['username'];
    $password = $_POST['password'];
    $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".$username."'");

    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
?>

এবং যদি কোনও অনন্য ব্যবহারকারীর নাম সহ কোনও ব্যবহারকারী থাকে তবে আপনি তার জন্য "=" ব্যবহার করতে পারেন। পছন্দ করার দরকার নেই।

আপনার প্রশ্নটি হবে:

mysql_query("SELECT * FROM Users WHERE UserName ='".$username."'");

3
এই কোডটি এসকিউএল ইঞ্জেকশনটির জন্য প্রশস্ত এবং এটি ব্যবহার করা উচিত নয়।
ব্র্যাড

@ অঞ্জুজগার এই কোডটি সরাসরি ইনপুট নেয় এবং এটিকে প্রশ্নের সাথে মিলিয়ে দেয়। কেউ এর জন্য পোস্ট ডেটাতে তাদের নিজস্ব এসকিউএল লিখতে পারে usernameএবং এটি কার্যকর করা হবে।
ব্র্যাড

তাহলে এসকিউএল ইঞ্জেকশন থেকে কোড রোধ করতে কী ব্যবহার করবেন?
অনুজ গার্গ

14

মাইএসকিউএল ক্যোয়ারির আগে একটি সংযোগ স্ট্রিং ভেরিয়েবল অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ, $conntএই কোডে:

$results = mysql_query($connt, "SELECT * FROM users");

1
এটি প্রশ্নে সমস্যাগুলি সমাধান করে না। এটিও ভুল এবং অন্য একটি ত্রুটি বাড়িয়ে তুলবে।
পল স্পিগেল

12

আপনি যে কোনও সময় ...

"সতর্কতা: mysqli_fetch_object () প্রত্যাশা 1 প্যারামিটারটি mysqli_result হবে, বুলিয়ান দেওয়া হয়েছে"

... এটি সম্ভবত কারণ আপনার প্রশ্নের সাথে একটি সমস্যা আছে is prepare()বা query()শক্তি প্রত্যাবর্তন FALSE(ক বুলিয়ান), কিন্তু এই জেনেরিক ব্যর্থতা বার্তা সংকেত সনাক্ত করুন পথে অনেক ছাড়বে না। আপনার প্রশ্নের সাথে কী ভুল তা আপনি কীভাবে আবিষ্কার করবেন? আপনি জিজ্ঞাসা করুন !

প্রথমত, নিশ্চিত হয়ে নিন যে ত্রুটি প্রতিবেদনটি চালু হয়েছে এবং দৃশ্যমান: আপনার খোলার <?phpট্যাগের ঠিক পরে এই ফাইলটি (গুলি) এর শীর্ষে এই দুটি লাইন যুক্ত করুন :

error_reporting(E_ALL);
ini_set('display_errors', 1);

যদি আপনার ত্রুটি প্রতিবেদনটি php.ini এ সেট করা থাকে তবে আপনাকে এই সম্পর্কে চিন্তা করতে হবে না। কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি ত্রুটিগুলি নিখুঁতভাবে পরিচালনা করেছেন এবং আপনার ব্যবহারকারীর কাছে কখনও কোনও সমস্যার আসল কারণটি প্রকাশ করবেন না। জনগণের কাছে প্রকৃত কারণটি প্রকাশ করা আপনার সাইট এবং সার্ভারগুলিকে ক্ষতি করতে চায় তাদের জন্য স্বর্ণের খোদাই করা আমন্ত্রণ হতে পারে। আপনি যদি ব্রাউজারটিতে ত্রুটিগুলি প্রেরণ করতে না চান তবে আপনি সর্বদা আপনার ওয়েব সার্ভারের ত্রুটি লগগুলি নিরীক্ষণ করতে পারেন। লগ অবস্থানগুলি সার্ভার থেকে সার্ভারে পৃথক হতে পারে যেমন উবুন্টুতে ত্রুটি লগটি সাধারণত অবস্থিত /var/log/apache2/error.log। আপনি যদি লিনাক্স পরিবেশে ত্রুটি লগগুলি পরীক্ষা করে tail -f /path/to/logথাকেন তবে রিয়েল-টাইমে ঘটে যাওয়া ত্রুটিগুলি দেখতে বা আপনি সেগুলি তৈরি করার জন্য কনসোল উইন্ডোতে ব্যবহার করতে পারেন ।

একবার আপনি স্ট্যান্ডার্ড ত্রুটি প্রতিবেদনের বাইরে গিয়ে আপনার ডেটাবেস সংযোগ এবং তদন্তগুলিতে ত্রুটি যুক্ত করে যা সমস্যাগুলি চলেছে সে সম্পর্কে আপনাকে আরও বিশদ দেবে। এই উদাহরণটি দেখুন যেখানে কলামের নামটি ভুল is প্রথমত, কোড যা জেনেরিক মারাত্মক ত্রুটি বার্তা দেয়:

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();

ত্রুটিটি জেনেরিক এবং যা চলছে তা সমাধানে আপনার পক্ষে খুব সহায়ক নয়।

কোডের আরও কয়েকটি লাইন দিয়ে আপনি খুব বিস্তারিত তথ্য পেতে পারেন যা আপনি অবিলম্বে সমস্যা সমাধানের জন্য ব্যবহার করতে পারেন । prepare()সত্যতার জন্য বিবৃতিটি পরীক্ষা করে দেখুন এবং যদি এটি ভাল হয় তবে আপনি বাঁধাই এবং কার্যকর করতে এগিয়ে যেতে পারেন।

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
    $query->bind_param('s', $definition);
    $query->execute();
    // any additional code you need would go here.
} else {
    $error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
    // handle error
}

কিছু ভুল হলে আপনি একটি ত্রুটি বার্তাটি থুতু ফেলতে পারেন যা আপনাকে সরাসরি সমস্যার দিকে নিয়ে যায়। এই ক্ষেত্রে, fooসারণীতে কোনও কলাম নেই , সমস্যা সমাধান করা তুচ্ছ।

আপনি যদি চয়ন করেন তবে আপনি এই চেকিংটি কোনও ফাংশন বা শ্রেণিতে অন্তর্ভুক্ত করতে পারেন এবং পূর্বে উল্লিখিত হিসাবে ত্রুটিগুলি কৃপণভাবে পরিচালনা করে এটি প্রসারিত করতে পারেন।


2
আপনি কীভাবে লিখতে পারেন "শুধু নিশ্চিত হয়ে নিন যে আপনি ত্রুটিগুলি করুণভাবে পরিচালনা করেছেন এবং কখনই আপনার ব্যবহারকারীদের কাছে কোনও সমস্যার আসল কারণটি প্রকাশ করেন না।" এবং echo $error;একটি পোস্টে?
পল স্পিগেল

পলস্প্পিজেলকে ধন্যবাদ জানাতে ধন্যবাদ। আমি উত্তরটি লিখে বা পুনর্বিবেচনা করেছি এবং কিছুটা পরে গেছে যে আমি সেখানে প্রতিধ্বনি রেখেছি।
জে ব্লানচার্ড

11
<?php
      $username = $_POST['username'];
       $password = $_POST['password'];

     $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string($username)."'")or die(mysql_error());
while($row=mysql_fetch_array($result))
  {
 echo $row['FirstName'];
 }
 ?>

11

এটা চেষ্টা কর

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query('SELECT * FROM Users WHERE UserName LIKE $username');

if($result){
while($row = mysqli_fetch_array($result))
{
    echo $row['FirstName'];
}
}

4
@ পাঞ্জেরে মাইএসকিএল_ * এখন চিত্রিত হয়েছে এবং পিএইচপি 7 থেকে সরানো হবে। পরিবর্তে mysqli_ * ব্যবহার করুন
মনোজ কুমার

9

প্রথমে ডাটাবেসের সাথে আপনার সংযোগটি পরীক্ষা করুন। এটি সফলভাবে সংযুক্ত আছে কি না?

যদি এটি হয়ে যায় তবে তার পরে আমি এই কোডটি লিখেছি এবং এটি ভালভাবে কাজ করে:

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
    $Q1mrks = $_GET['q1mrks'];
    $marks = $_GET['marks'];
    $qt1 = $_GET['qt1'];

    $qtype_qry = mysql_query("
        SELECT *
        FROM s_questiontypes
        WHERE quetype_id = '$qt1'
    ");
    $row = mysql_fetch_assoc($qtype_qry);
    $qcode = $row['quetype_code'];

    $sq_qry = "
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        ORDER BY RAND() LIMIT $Q1mrks
    ";
    $sq_qry = mysql_query("
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        LIMIT $Q1mrks
    ");
    while ($qrow = mysql_fetch_array($sq_qry)) {
        $qm = $qrow['marks'] . "<br />";
        $total += $qm . "<br />";
    }
    echo $total . "/" . $marks;
}

2
এই কোড ব্যবহার করবেন না। এটি এসকিউএল ইঞ্জেকশন আক্রমণগুলির জন্য উন্মুক্ত।
ব্র্যাড

9

নিশ্চিত হয়ে নিন যে আপনি অনুসন্ধান চালানোর আগে db_close () ব্যবহার করে ডেটাবেস বন্ধ করছেন না:

আপনি যদি কোনও স্ক্রিপ্টে একাধিক প্রশ্নগুলি ব্যবহার করে থাকেন এমনকি আপনি এমন অন্যান্য পৃষ্ঠাগুলিও অন্তর্ভুক্ত করে থাকেন যেখানে ক্যোরি বা ডাটাবেস সংযোগ রয়েছে, তবে সম্ভবত এটি সম্ভব যে আপনি যে কোনও জায়গায় db_close () ব্যবহার করেন যা আপনার ডাটাবেস সংযোগটি বন্ধ করে দেবে যাতে আপনি নিশ্চিত হন যে আপনি আপনার স্ক্রিপ্টে এই ভুল করছেন না।


8

আপনি যদি চেক করার সময় কোনও মাইএসকিউএল ত্রুটি উপস্থিত না হন তবে নিশ্চিত হয়ে নিন যে আপনি সঠিকভাবে আপনার ডাটাবেস টেবিলটি তৈরি করেছেন। এটা আমার সাথে ঘটেছিল। যেকোন অযাচিত কমা বা উদ্ধৃতি সন্ধান করুন।


7

প্রথমে আপনার সংযোগটি পরীক্ষা করুন।

তারপরে আপনি যদি ডাটাবেস থেকে সঠিক মানটি পেতে চান তবে আপনার লিখতে হবে:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName =`$usernam`");

অথবা আপনি LIKEমানটির ধরণটি পেতে চান তবে আপনার এই লেখা উচিত:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");

3
এই কোডটি এসকিউএল ইঞ্জেকশনটির জন্য প্রশস্ত এবং এটি ব্যবহার করা উচিত নয়।
ব্র্যাড

6

$resultআনার অ্যারে চালানোর আগে ওয়েদারও এর মতো ব্যর্থ হচ্ছে কিনা তাও পরীক্ষা করতে পারেন

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');
if(!$result)
{
     echo "error executing query: "+mysql_error(); 
}else{
       while($row = mysql_fetch_array($result))
       {
         echo $row['FirstName'];
       }
}

3
এই কোড ব্যবহার করবেন না। এটি এসকিউএল ইঞ্জেকশন আক্রমণগুলির জন্য উন্মুক্ত।
ব্র্যাড

তবে কোডটি যদি কাজ করে তবে আমার মনে হয় আপনার কোডটি সম্পাদনা করা উচিত এবং কোডটিকে জড়িত করার পরিবর্তে প্রয়োজনীয় ফিল্টারগুলি ইনপুট করা উচিত।
ব্যবহারকারী 28864

ফিল্টারগুলির সাধারণ ব্যবহার এই কোডটির সাথে কী ভুল তা ঠিক করবে না। সেরা সমাধান হ'ল পিডিও বা অনুরূপ সাথে প্রস্তুত / পরামিতিযুক্ত কোয়েরি ব্যবহার করা। আমি এটি ঠিক করার কোনও বিন্দু দেখতে পাচ্ছি না, কারণ এখানে ইতিমধ্যে সঠিক উত্তর পোস্ট করা হয়েছে। আদর্শভাবে, এই উত্তরটি মুছে ফেলা হবে। তবে, আপনার উত্তরটি ঠিক করার জন্য আপনাকে স্বাগতম এবং যদি এটি সঠিক হয় তবে আমি আনন্দের সাথে এটিতে ভোট দিয়ে দেব।
ব্র্যাড

ঠিক আছে, আপনি যদি উত্তরটি বিবেচনার জন্য উপযুক্ত না মনে করেন আপনি এগিয়ে যেতে পারেন এবং এটি পড়তে পারেন। তবে আমি ভেবেছিলাম এই সম্প্রদায়ের পুরো বিষয়টি হ'ল জ্ঞান ভাগ করে নেওয়া এবং অবদান রাখা। লোক দেখানো এবং দূরে রাখার পরিবর্তে যদি আপনার কিছু ভাগ করার থাকে তবে।
ব্যবহারকারী 28864

2
আপনি সঠিক, এই সম্প্রদায়ের পুরো বিষয়টি হ'ল জ্ঞান ভাগ করে নেওয়া। সে কারণেই আমার ডাউনভোটের সাথে ব্যাখ্যা যুক্ত করা হয়েছে এবং কেন আপনার ফিল্টার প্রস্তাবনা পর্যাপ্ত ছিল না তা আরও ব্যাখ্যা করে। আপনার উত্তরটি খুঁজে পাওয়া অন্য কারও সাথে আমি আপনাকে অনেক বেশি সতর্ক করতে চাই, উপরের কোডটি নিরাপত্তাহীন। সবার পক্ষে খারাপ কোড চালিয়ে যাওয়ার চেয়ে সঠিক পদ্ধতিগুলি শেখা ভাল। এবং, আমি আপনার উত্তর মুছে ফেলতে পারি না, করব না you আপনি যদি এটি করতে চান তবে এটি আপনার বিষয়।
ব্র্যাড

4

আপনার ডাটাবেস সংযোগটি ব্যর্থ হলে সাধারণত একটি ত্রুটি দেখা দেয়, সুতরাং আপনার ডাটাবেসটি সংযোগ করতে বা ডাটাবেস ফাইলটি অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন।

include_once(db_connetc.php');

অথবা

// Create a connection
$connection = mysql_connect("localhost", "root", "") or die(mysql_error());

//Select database
mysql_select_db("db_name", $connection) or die(mysql_error());

$employee_query = "SELECT * FROM employee WHERE `id` ='".$_POST['id']."'";

$employee_data = mysql_query($employee_query);

if (mysql_num_rows($employee_data) > 0) {

    while ($row = mysql_fetch_array($employee_data)){
        echo $row['emp_name'];
    } // end of while loop
} // end of if
  • সর্বাধিক অনুশীলন হ'ল স্ক্য্লিয়গে ক্যোয়ারী চালানো এবং তারপরে এটি আপনার পৃষ্ঠা কোডে অনুলিপি করুন।
  • আপনার জিজ্ঞাসাটি সর্বদা একটি ভেরিয়েবলে সংরক্ষণ করুন এবং তারপরে সেই পরিবর্তনশীলটি প্রতিধ্বনিত করুন। তারপর পাস mysql_query($query_variable);

2
1) আপনি জানেন না যে আমার এখানে বা উপরে কোন উত্তর দেওয়া হয়েছে বা না দিয়েছি। 2) আমি যেমন আমার প্রথম মন্তব্যে ব্যাখ্যা করেছি; আপনার উত্তরটি সমস্যার উল্লেখ করে না ( বুলেটিয়ানটি mysql_fetch_array এ গেছে ) এবং আপনার সিনট্যাক্স ত্রুটি রয়েছে
ফিল

2
আপনার কোড উদাহরণ দুটিতে আপনার কাছে ভুল উদ্ধৃতি রয়েছে। আপনার দ্বিতীয় কোড ব্লকে প্রয়োগ করা সিনট্যাক্স হাইলাইট হ'ল কিছু ভুল হয়েছে
ফিল

4
এই কোডটি এসকিউএল ইঞ্জেকশনের সাপেক্ষে এবং এটি ব্যবহার করা উচিত নয়। @ এংজারজার্ডি যদি আপনি এই কোডটি আপনার প্রোডাকশন সিস্টেমে ব্যবহার করছেন তবে আপনাকে অবশ্যই হ্যাক করা হয়েছে এবং পিডিও বা অনুরূপ সাথে প্রস্তুত / প্যারামিটারাইজড কোয়েরি ব্যবহার করে পরিস্থিতি কিনে নেওয়া উচিত। এমন বট রয়েছে যা এই জাতীয় দুর্বলতার জন্য স্বয়ংক্রিয় পরীক্ষণ করেছে।
ব্র্যাড

1
@ ইংজারজার্ডি আপনার সম্পর্কে "কোনও ত্রুটি নেই, আমি বর্তমানে কোডটি এখানে পেস্ট করেছি।" উপরে মন্তব্য । ক্যোয়ারীতে একটি অনুপস্থিত উদ্ধৃতি ছিল যা আমি সংশোধন করেছি। এটি একটি (পিএইচপি) বিশ্লেষণ ত্রুটি ছুঁড়ে ফেলেছে।
ফানকি চল্লিশ নিনার

2

এই কোডটি চেষ্টা করে দেখুন এটি ঠিক আছে

ভেরিয়েবলের জন্য পোস্ট ভেরিয়েবল বরাদ্দ করুন

   $username = $_POST['uname'];

   $password = $_POST['pass'];

  $result = mysql_query('SELECT * FROM userData WHERE UserName LIKE $username');

if(!empty($result)){

    while($row = mysql_fetch_array($result)){
        echo $row['FirstName'];
     }
}

3
এই কোডটি এসকিউএল ইঞ্জেকশন আক্রমণগুলির সাপেক্ষে এবং এটি ব্যবহার করা উচিত নয়।
ব্র্যাড

1

যেহেতু $ ব্যবহারকারীর নামটি একটি পিএইচপি ভেরিয়েবল, আমাদের এটি স্ট্রিং হিসাবে মাইসকিলে পাস করতে হবে সুতরাং যেই কোয়েরিতে আপনি একটি একক উদ্ধৃতি দিয়ে শুরু করেছিলেন আমরা ডাবল উদ্ধৃতি, একক উদ্ধৃতি এবং সংক্ষেপণ উদ্দেশ্যে ("'$ ব্যবহারকারীর নাম) একটি পুরোপুরি ব্যবহার করব। '") আপনি যদি ডাবল উদ্ধৃতি দিয়ে শুরু করেন তবে আপনি উদ্ধৃতিগুলি (' '। $ ব্যবহারকারীর নাম।"') উল্টাবেন।

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE "'.$username.'"');

while($row = mysql_fetch_array($result))
     {
      echo $row['FirstName'];
     }

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".$username."' ");

while($row = mysql_fetch_array($result))
     {
      echo $row['FirstName'];
     }

তবে মাইএসকিএল-এর ব্যবহার অনেক হ্রাস পেয়েছে, পরিবর্তে পিডিও ব্যবহার করুন it এটি সহজ তবে খুব সুরক্ষিত


তবে মাইএসকিএল ব্যবহার অবমূল্যায়ন করেছে। আপনি পরিবর্তে PDO ব্যবহার করতে পারেন। আমি আপনাকে একটি নমুনা লগইন দিতে দিন।
ডেনিস কিপটুজেন

2
পাসওয়ার্ডগুলি কখনও সরল পাঠ্য আকারে সংরক্ষণ করা উচিত নয়, পিএইচপি যে পাসওয়ার্ডগুলি হ্যাশিং এবং হ্যাশ পাসওয়ার্ড যাচাইয়ের সাথে মোকাবেলা করার জন্য নির্মিত ফুকশনগুলিতে ব্যবহার করা উচিত!
স্পেসফিনিক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.