php - tutorial - w3schools




mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows ইত্যাদি... প্যারামিটার 1 রিসোর্স হতে পারে (20)

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

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

অথবা

mysqli_fetch_array () পরামিতি 1 mysqli_result হতে হবে, বুলিয়ান দেওয়া হবে

অথবা

বুলিয়ান / অ-বস্তুতে সদস্যের ফাংশন fetch_array () এ কল করুন

এই আমার কোড:

$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'];
}

একই মত কোড প্রযোজ্য

$result = mysqli_query($mysqli, 'SELECT ...');
// mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given
while( $row=mysqli_fetch_array($result) ) {
    ...

এবং

$result = $mysqli->query($mysqli, 'SELECT ...');
// Call to a member function fetch_assoc() on a non-object
while( $row=$result->fetch_assoc($result) ) {
    ...

এবং

$result = $pdo->query('SELECT ...', PDO::FETCH_ASSOC);
// Invalid argument supplied for foreach()
foreach( $result as $row ) {
    ...

এবং

$stmt = $mysqli->prepare('SELECT ...');
// Call to a member function bind_param() on a non-object
$stmt->bind_param(...);

এবং

$stmt = $pdo->prepare('SELECT ...');
// Call to a member function bindParam() on a non-object
$stmt->bindParam(...);

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

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


Depricated mysql_ * ফাংশন ব্যবহার করবেন না (পিএইচপি 5.5 এ বঞ্চিত হবে php 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();
?>

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


আপনার কোড এই মত কিছু হতে হবে

$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'];
}

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


আপনি ভ্যাচারের অ্যারে নির্বাহ করার আগে, ভিলার $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'];
       }
}

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

আমি আশা করি এটা কারো সাহায্যে লাগবে.


এই প্রশ্নের কাজ করা উচিত:

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

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

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


একটি প্রশ্ন বিভিন্ন কারণের জন্য ব্যর্থ হতে পারে যার ক্ষেত্রে both myqq_ * এবং mysqli এক্সটেনশান তাদের নিজ নিজ ক্যোয়ারী ফাংশন / পদ্ধতিগুলি থেকে false ফেরত দেবে। আপনি যে ত্রুটির অবস্থা জন্য পরীক্ষা এবং এটি অনুযায়ী হ্যান্ডেল করতে হবে।

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

উল্লেখ্য mysql_ ফাংশনগুলি অব্যবহৃত এবং php সংস্করণ 7 এ সরানো হয়েছে।

mysql_fetch_array পাস করার আগে $result পরীক্ষা করুন। আপনি এটি 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 হবে না, অন্যথায় এটি (খুব কম সময়ে) অবৈধ HTML তৈরি করবে। এছাড়াও, ডেটাবেস ত্রুটির বার্তাগুলি অ-প্রশাসক ব্যবহারকারীদের কাছে প্রদর্শিত হবে না, কারণ এটি খুব বেশি তথ্য প্রকাশ করে


এটা চেষ্টা কর

$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'];
}
}

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

$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'];
}

নিম্নলিখিত কোড চেষ্টা করুন। এটা জরিমানা কাজ করতে পারে।

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

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

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

চেক

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());

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

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

$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%'");

প্রায় $username উদ্ধৃতি রাখুন। সংখ্যাসূচক মান বিরোধ হিসাবে স্ট্রিং মান, উদ্ধৃতি মধ্যে আবদ্ধ করা আবশ্যক।

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

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


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

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

... সম্ভবত আপনার প্রশ্নের সাথে একটি সমস্যা আছে কারণ। 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 ব্যবহার করতে পারেন।

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

$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;
    echo $error; // 1054 Unknown column 'foo' in 'field list'
}

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

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


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

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
  • সেরা অনুশীলন sqlyog মধ্যে প্রশ্ন চালানো হয় এবং তারপরে আপনার পৃষ্ঠা কোডে এটি অনুলিপি করা হয়।
  • সর্বদা একটি পরিবর্তনশীল আপনার ক্যোয়ারী সংরক্ষণ করুন এবং তারপর যে পরিবর্তনশীল প্রতিধ্বনি। তারপর mysql_query($query_variable); পাস করুন mysql_query($query_variable);

এই কোড এটি জরিমানা কাজ করে দেখুন

পরিবর্তনশীল পোস্ট পোস্ট ভ্যারিয়েবল

   $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'];
     }
}

$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 কোয়েরি ব্যবহার করার পরিবর্তে, আপনি এই ORDER প্রশ্নের দ্বারা ব্যবহার করতে পারেন। এটি একটি প্রশ্নের ব্যবহার করার চেয়ে অনেক ভাল।

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


$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); হিসাবে @mysql_query(your query); দমন করে @mysql_query(your query);


<?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'];
 }
 ?>




mysql