ਸੀਆਰਐਮ ਅਤੇ ਡਾਟਾ ਪਲੇਟਫਾਰਮ

PHP ਅਤੇ MySQL: ਇੱਕ ਟੈਬ ਸੀਮਿਤ ਜਾਂ CSV ਫਾਈਲ ਵਿੱਚ ਇੱਕ ਪੁੱਛਗਿੱਛ ਨਿਰਯਾਤ ਕਰੋ

ਇਸ ਹਫਤੇ ਦੇ ਅੰਤ ਵਿੱਚ, ਮੈਂ ਇੱਕ ਬਣਾਉਣਾ ਚਾਹੁੰਦਾ ਸੀ PHP ਪੰਨਾ ਜੋ ਕਿਸੇ ਵੀ ਬੈਕਅੱਪ ਕਰੇਗਾ MySQL ਇੱਕ ਟੈਬ ਸੀਮਿਤ ਫਾਈਲ ਵਿੱਚ ਪੁੱਛਗਿੱਛ ਜਾਂ ਸਾਰਣੀ. ਨੈੱਟ 'ਤੇ ਮੌਜੂਦ ਜ਼ਿਆਦਾਤਰ ਉਦਾਹਰਣਾਂ ਦੇ ਕਾਲਮ ਹਾਰਡ-ਕੋਡ ਕੀਤੇ ਹੋਏ ਹਨ।

ਮੇਰੇ ਕੇਸ ਵਿੱਚ, ਮੈਂ ਚਾਹੁੰਦਾ ਸੀ ਕਿ ਕਾਲਮ ਗਤੀਸ਼ੀਲ ਹੋਣ, ਇਸਲਈ ਮੈਨੂੰ ਕਾਲਮ ਦੇ ਨਾਮਾਂ ਨਾਲ ਸਿਰਲੇਖ ਕਤਾਰ ਬਣਾਉਣ ਲਈ ਪਹਿਲਾਂ ਸਾਰੇ ਟੇਬਲ ਫੀਲਡ ਨਾਮਾਂ ਵਿੱਚੋਂ ਲੂਪ ਕਰਨਾ ਪਿਆ ਅਤੇ ਫਿਰ ਬਾਕੀ ਡੇਟਾ ਕਤਾਰਾਂ ਲਈ ਸਾਰੇ ਰਿਕਾਰਡਾਂ ਵਿੱਚੋਂ ਲੂਪ ਕਰਨਾ ਪਿਆ। ਮੈਂ ਸਿਰਲੇਖ ਨੂੰ ਵੀ ਸੈਟ ਕੀਤਾ ਹੈ ਤਾਂ ਜੋ ਬ੍ਰਾਊਜ਼ਰ ਫਾਈਲ ਦੀ ਮਿਤੀ ਅਤੇ ਟਾਈਮਸਟੈਂਪ ਦੇ ਨਾਮ ਨਾਲ ਫਾਈਲ ਟਾਈਪ (txt) ਵਿੱਚ ਫਾਈਲ ਡਾਉਨਲੋਡ ਸ਼ੁਰੂ ਕਰੇਗਾ.

PHP ਵਿੱਚ MySQL ਤੋਂ ਟੈਬ ਸੀਮਿਤ ਨਿਰਯਾਤ

<?php
$today = date("YmdHi");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$today."_Backup.txt\"");
$conn = new mysqli("hostname", "username", "password", "database_name"); // Replace with your database credentials

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$query = "SELECT * FROM `mytable` ORDER BY `myorder`";
$result = $conn->query($query);

if ($result->num_rows > 0) {
    $fields = $result->fetch_fields();
    
    // Prepare the header row
    $header = [];
    foreach ($fields as $field) {
        $header[] = $field->name;
    }
    $data = implode("\t", $header) . "\n";

    // Fetch and process the data rows
    while ($row = $result->fetch_assoc()) {
        $rowValues = [];
        foreach ($fields as $field) {
            $rowValues[] = $row[$field->name];
        }
        $data .= implode("\t", $rowValues) . "\n";
    }

    // Output the data
    echo $data;
} else {
    echo "No data found";
}

// Close the database connection
$conn->close();
?>

ਆਉ ਹਰੇਕ ਹਿੱਸੇ ਲਈ ਸਪੱਸ਼ਟੀਕਰਨ ਦੇ ਨਾਲ ਕਦਮ ਦਰ ਕਦਮ ਕੋਡ ਦੁਆਰਾ ਚੱਲੀਏ:

<?php
// Get the current date and time in a specific format
$today = date("YmdHi");

// Set HTTP headers for file download
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$today."_Backup.txt\"");

// Create a MySQL database connection
$conn = new mysqli("hostname", "username", "password", "database_name"); // Replace with your database credentials

// Check if the database connection was successful
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
  • ਅਸੀਂ ਮੌਜੂਦਾ ਮਿਤੀ ਅਤੇ ਸਮਾਂ "YmdHi" ਫਾਰਮੈਟ ਵਿੱਚ ਤਿਆਰ ਕਰਦੇ ਹਾਂ ਅਤੇ ਇਸਨੂੰ ਵਿੱਚ ਸਟੋਰ ਕਰਦੇ ਹਾਂ $today ਵੇਰੀਏਬਲ.
  • HTTP ਸਿਰਲੇਖ ਇਹ ਨਿਸ਼ਚਿਤ ਕਰਨ ਲਈ ਸੈੱਟ ਕੀਤੇ ਗਏ ਹਨ ਕਿ ਸਮੱਗਰੀ ਨੂੰ ਇੱਕ ਔਕਟੇਟ-ਸਟ੍ਰੀਮ (ਬਾਈਨਰੀ ਡੇਟਾ) ਦੇ ਰੂਪ ਵਿੱਚ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ ਅਤੇ ਨਿਰਧਾਰਤ ਫਾਈਲ ਨਾਮ ਨਾਲ ਇੱਕ ਫਾਈਲ ਡਾਉਨਲੋਡ ਨੂੰ ਟਰਿੱਗਰ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।
  • ਐਕਸਟੈਂਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ, ਅਸੀਂ ਇੱਕ MySQL ਡੇਟਾਬੇਸ ਕਨੈਕਸ਼ਨ ਬਣਾਉਂਦੇ ਹਾਂ, ਪਲੇਸਹੋਲਡਰਾਂ ਨੂੰ ਤੁਹਾਡੇ ਅਸਲ ਡੇਟਾਬੇਸ ਪ੍ਰਮਾਣ ਪੱਤਰਾਂ ਨਾਲ ਬਦਲਦੇ ਹਾਂ।
  • ਅਸੀਂ ਜਾਂਚ ਕਰਦੇ ਹਾਂ ਕਿ ਕੀ ਡਾਟਾਬੇਸ ਕੁਨੈਕਸ਼ਨ ਸਫਲ ਸੀ। ਅਸੀਂ ਸਕ੍ਰਿਪਟ ਨੂੰ ਖਤਮ ਕਰਦੇ ਹਾਂ ਅਤੇ ਜੇਕਰ ਕੋਈ ਗਲਤੀ ਹੁੰਦੀ ਹੈ ਤਾਂ ਇੱਕ ਗਲਤੀ ਸੁਨੇਹਾ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਦੇ ਹਾਂ।
// Define the SQL query to select data from the `mytable` table
$query = "SELECT * FROM `mytable` ORDER BY `myorder`";

// Execute the SQL query
$result = $conn->query($query);

// Check if there are any rows returned
if ($result->num_rows > 0) {
    // Fetch the field (column) names
    $fields = $result->fetch_fields();

    // Prepare the header row for the export file
    $header = [];
    foreach ($fields as $field) {
        $header[] = $field->name;
    }
    $data = implode("\t", $header) . "\n";
  • ਅਸੀਂ ਸਾਰੇ ਡੇਟਾ ਨੂੰ ਚੁਣਨ ਲਈ SQL ਪੁੱਛਗਿੱਛ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੇ ਹਾਂ mytable ਟੇਬਲ, ਦੁਆਰਾ ਇਸਨੂੰ ਆਰਡਰ ਕਰਨਾ myorder ਕਾਲਮ
  • ਪੁੱਛਗਿੱਛ ਨੂੰ ਚਲਾਇਆ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਨਤੀਜਾ ਵਿੱਚ ਸਟੋਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ $result ਵੇਰੀਏਬਲ.
  • ਅਸੀਂ ਜਾਂਚ ਕਰਦੇ ਹਾਂ ਕਿ ਕੀ ਕੋਈ ਕਤਾਰਾਂ ਦੀ ਜਾਂਚ ਕਰਕੇ ਵਾਪਸੀ ਹੋਈ ਹੈ num_rows ਨਤੀਜੇ ਵਸਤੂ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ.
  • ਅਸੀਂ ਵਰਤਦੇ ਹਾਂ fetch_fields() ਖੇਤਰ (ਕਾਲਮ) ਦੇ ਨਾਮ ਪ੍ਰਾਪਤ ਕਰਨ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਵਿੱਚ ਸਟੋਰ ਕਰਨ ਲਈ $fields ਐਰੇ.
  • ਨਿਰਯਾਤ ਫਾਈਲ ਲਈ ਸਿਰਲੇਖ ਕਤਾਰ ਫੀਲਡ ਦੇ ਨਾਮਾਂ ਨੂੰ ਲੂਪ ਕਰਕੇ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਟੈਬਾਂ ਨਾਲ ਜੋੜ ਕੇ ਤਿਆਰ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।
    // Fetch and process the data rows
    while ($row = $result->fetch_assoc()) {
        $rowValues = [];
        foreach ($fields as $field) {
            $rowValues[] = $row[$field->name];
        }
        $data .= implode("\t", $rowValues) . "\n";
    }
  • ਅਸੀਂ ਇੱਕ ਵਰਤਦੇ ਹਾਂ while ਵਰਤਦੇ ਹੋਏ ਨਤੀਜਾ ਸੈੱਟ ਤੋਂ ਹਰੇਕ ਡੇਟਾ ਕਤਾਰ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਲੂਪ fetch_assoc().
  • ਲੂਪ ਦੇ ਅੰਦਰ, ਅਸੀਂ ਫੀਲਡਾਂ ਦੁਆਰਾ ਦੁਹਰਾਉਣ ਅਤੇ ਸੰਬੰਧਿਤ ਡੇਟਾ ਨੂੰ ਇਕੱਠਾ ਕਰਕੇ ਹਰੇਕ ਕਤਾਰ ਦੇ ਮੁੱਲ ਤਿਆਰ ਕਰਦੇ ਹਾਂ।
  • ਇੱਕ ਟੈਬ-ਸੀਮਤ ਕਤਾਰ ਬਣਾਉਣ ਲਈ ਹਰੇਕ ਕਤਾਰ ਦੇ ਮੁੱਲਾਂ ਨੂੰ ਟੈਬਾਂ ਨਾਲ ਜੋੜਿਆ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਇਸ ਕਤਾਰ ਨੂੰ $data ਵੇਰੀਏਬਲ.
    // Output the data to the browser
    echo $data;
} else {
    // If no data is found, display a message
    echo "No data found";
}

// Close the MySQL database connection
$conn->close();
?>
  • ਜੇਕਰ ਕੋਈ ਡਾਟਾ ਮਿਲਦਾ ਹੈ (ਨਾਲ ਚੈੱਕ ਕੀਤਾ ਗਿਆ ਹੈ num_rows), ਅਸੀਂ ਸੰਯੁਕਤ ਡੇਟਾ ਨੂੰ ਈਕੋ ਕਰਦੇ ਹਾਂ, ਜੋ ਕਿ ਨਿਰਯਾਤ ਫਾਈਲ ਦੀ ਸਮੱਗਰੀ ਹੈ। ਇਹ ਉਪਭੋਗਤਾ ਦੇ ਬ੍ਰਾਉਜ਼ਰ ਵਿੱਚ ਫਾਈਲ ਡਾਉਨਲੋਡ ਨੂੰ ਚਾਲੂ ਕਰਦਾ ਹੈ।
  • ਜੇਕਰ ਕੋਈ ਡਾਟਾ ਨਹੀਂ ਮਿਲਦਾ, ਤਾਂ ਅਸੀਂ ਇੱਕ ਸੁਨੇਹਾ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਦੇ ਹਾਂ ਜੋ ਇਹ ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ ਕੋਈ ਡਾਟਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।
  • ਅਸੀਂ MySQL ਡਾਟਾਬੇਸ ਕਨੈਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਬੰਦ ਕਰਦੇ ਹਾਂ $conn->close() ਸਰੋਤ ਜਾਰੀ ਕਰਨ ਲਈ.

ਇਹ ਕੋਡ ਕੁਸ਼ਲਤਾ ਨਾਲ ਇੱਕ MySQL ਡੇਟਾਬੇਸ ਸਾਰਣੀ ਤੋਂ ਇੱਕ ਟੈਬ-ਸੀਮਤ ਟੈਕਸਟ ਫਾਈਲ ਵਿੱਚ ਡੇਟਾ ਨੂੰ ਨਿਰਯਾਤ ਕਰਦਾ ਹੈ ਅਤੇ ਵੱਖ-ਵੱਖ ਦ੍ਰਿਸ਼ਾਂ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਡੇਟਾਬੇਸ ਕਨੈਕਸ਼ਨ ਗਲਤੀਆਂ ਅਤੇ ਖਾਲੀ ਨਤੀਜੇ ਸੈੱਟ।

PHP ਵਿੱਚ MySQL ਤੋਂ ਕੌਮੇ ਨਾਲ ਵੱਖ ਕੀਤੇ ਮੁੱਲ ਨਿਰਯਾਤ

ਮੈਂ ਇੱਕ CSV ਫਾਈਲ ਦੇ ਰੂਪ ਵਿੱਚ ਡੇਟਾ ਨੂੰ ਨਿਰਯਾਤ ਕਰਨ ਲਈ ਕੋਡ ਨੂੰ ਸੋਧ ਸਕਦਾ ਹਾਂ। ਇਹ ਕੋਡ ਹੈ, CSV ਨਿਰਯਾਤ ਲਈ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ ਹੈ:

<?php
// Get the current date and time in a specific format
$today = date("YmdHi");

// Set HTTP headers for file download
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=\"".$today."_Backup.csv\"");

// Create a MySQL database connection
$conn = new mysqli("hostname", "username", "password", "database_name"); // Replace with your database credentials

// Check if the database connection was successful
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Define the SQL query to select data from the `mytable` table
$query = "SELECT * FROM `mytable` ORDER BY `myorder`";

// Execute the SQL query
$result = $conn->query($query);

// Check if there are any rows returned
if ($result->num_rows > 0) {
    // Prepare the output file handle for writing
    $output = fopen('php://output', 'w');

    // Fetch and process the data rows
    while ($row = $result->fetch_assoc()) {
        // Output each row as a CSV line
        fputcsv($output, $row);
    }

    // Close the output file handle
    fclose($output);
} else {
    // If no data is found, display a message
    echo "No data found";
}

// Close the MySQL database connection
$conn->close();
?>

ਇਸ ਸੋਧੇ ਹੋਏ ਕੋਡ ਵਿੱਚ:

  • HTTP ਜਵਾਬ ਲਈ ਸਿਰਲੇਖ a ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਅੱਪਡੇਟ ਕੀਤੇ ਗਏ ਹਨ text/csv ਸਮੱਗਰੀ ਦੀ ਕਿਸਮ, ਅਤੇ ਫਾਈਲ ਨਾਮ ਵਿੱਚ “.csv” ਐਕਸਟੈਂਸ਼ਨ ਹੈ।
  • CSV ਸਮੱਗਰੀ ਨੂੰ ਹੱਥੀਂ ਬਣਾਉਣ ਦੀ ਬਜਾਏ, ਅਸੀਂ ਵਰਤਦੇ ਹਾਂ fputcsv ਇੱਕ CSV ਲਾਈਨ ਦੇ ਰੂਪ ਵਿੱਚ ਸੈੱਟ ਕੀਤੇ MySQL ਨਤੀਜੇ ਤੋਂ ਹਰੇਕ ਕਤਾਰ ਨੂੰ ਆਉਟਪੁੱਟ ਕਰਨ ਲਈ ਫੰਕਸ਼ਨ। ਇਹ ਫੰਕਸ਼ਨ ਤੁਹਾਡੇ ਲਈ CSV ਫਾਰਮੈਟਿੰਗ ਨੂੰ ਹੈਂਡਲ ਕਰਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਵਿਸ਼ੇਸ਼ ਅੱਖਰਾਂ ਨੂੰ ਸੰਭਾਲਣਾ ਅਤੇ ਲੋੜ ਪੈਣ 'ਤੇ ਡਬਲ ਕੋਟਸ ਵਿੱਚ ਖੇਤਰਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਸ਼ਾਮਲ ਹੈ।
  • ਅਸੀਂ ਆਉਟਪੁੱਟ ਫਾਈਲ ਹੈਂਡਲ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਖੋਲ੍ਹਦੇ ਹਾਂ fopen 'php://output' ਦੇ ਨਾਲ ਫਾਈਲ ਨਾਮ ਵਜੋਂ। ਇਹ ਸਾਨੂੰ ਸਿੱਧੇ HTTP ਜਵਾਬ ਆਉਟਪੁੱਟ ਸਟ੍ਰੀਮ ਨੂੰ ਲਿਖਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।
  • ਕੋਡ ਨੂੰ CSV ਨਿਰਯਾਤ ਨੂੰ ਕੁਸ਼ਲਤਾ ਨਾਲ ਸੰਭਾਲਣ ਲਈ ਢਾਂਚਾ ਬਣਾਇਆ ਗਿਆ ਹੈ ਅਤੇ ਹੋ ਜਾਣ 'ਤੇ ਫਾਈਲ ਹੈਂਡਲ ਨੂੰ ਬੰਦ ਕਰ ਦਿੰਦਾ ਹੈ।

ਇਹ ਕੋਡ MySQL ਟੇਬਲ ਤੋਂ ਡੇਟਾ ਨੂੰ ਇੱਕ CSV ਫਾਈਲ ਦੇ ਰੂਪ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੇਗਾ, ਜਿਸ ਨਾਲ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਐਕਸਲ ਵਰਗੀਆਂ ਸਪ੍ਰੈਡਸ਼ੀਟ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਖੋਲ੍ਹਣਾ ਅਤੇ ਕੰਮ ਕਰਨਾ ਆਸਾਨ ਹੋ ਜਾਵੇਗਾ। ਡਾਟਾਬੇਸ ਪ੍ਰਮਾਣ ਪੱਤਰਾਂ ਨੂੰ ਆਪਣੇ ਨਾਲ ਬਦਲਣਾ ਨਾ ਭੁੱਲੋ।

Douglas Karr

Douglas Karr ਦਾ CMO ਹੈ ਓਪਨ ਇਨਸਾਈਟਸ ਅਤੇ ਦੇ ਸੰਸਥਾਪਕ Martech Zone. ਡਗਲਸ ਨੇ ਦਰਜਨਾਂ ਸਫਲ MarTech ਸਟਾਰਟਅੱਪਸ ਦੀ ਮਦਦ ਕੀਤੀ ਹੈ, ਮਾਰਟੇਕ ਐਕਵਾਇਰਿੰਗ ਅਤੇ ਨਿਵੇਸ਼ਾਂ ਵਿੱਚ $5 ਬਿਲੀਅਨ ਤੋਂ ਵੱਧ ਦੀ ਉਚਿਤ ਮਿਹਨਤ ਵਿੱਚ ਸਹਾਇਤਾ ਕੀਤੀ ਹੈ, ਅਤੇ ਕੰਪਨੀਆਂ ਨੂੰ ਉਹਨਾਂ ਦੀ ਵਿਕਰੀ ਅਤੇ ਮਾਰਕੀਟਿੰਗ ਰਣਨੀਤੀਆਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਅਤੇ ਸਵੈਚਲਿਤ ਕਰਨ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰਨਾ ਜਾਰੀ ਰੱਖਿਆ ਹੈ। ਡਗਲਸ ਇੱਕ ਅੰਤਰਰਾਸ਼ਟਰੀ ਪੱਧਰ 'ਤੇ ਮਾਨਤਾ ਪ੍ਰਾਪਤ ਡਿਜੀਟਲ ਪਰਿਵਰਤਨ ਅਤੇ ਮਾਰਟੈਕ ਮਾਹਰ ਅਤੇ ਸਪੀਕਰ ਹੈ। ਡਗਲਸ ਇੱਕ ਡਮੀ ਦੀ ਗਾਈਡ ਅਤੇ ਇੱਕ ਕਾਰੋਬਾਰੀ ਲੀਡਰਸ਼ਿਪ ਕਿਤਾਬ ਦਾ ਪ੍ਰਕਾਸ਼ਿਤ ਲੇਖਕ ਵੀ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ

ਸਿਖਰ ਤੇ ਵਾਪਸ ਜਾਓ
ਬੰਦ ਕਰੋ

ਐਡਬਲਾਕ ਖੋਜਿਆ ਗਿਆ

Martech Zone ਤੁਹਾਨੂੰ ਇਹ ਸਮੱਗਰੀ ਬਿਨਾਂ ਕਿਸੇ ਕੀਮਤ ਦੇ ਪ੍ਰਦਾਨ ਕਰਨ ਦੇ ਯੋਗ ਹੈ ਕਿਉਂਕਿ ਅਸੀਂ ਵਿਗਿਆਪਨ ਆਮਦਨ, ਐਫੀਲੀਏਟ ਲਿੰਕਾਂ, ਅਤੇ ਸਪਾਂਸਰਸ਼ਿਪਾਂ ਰਾਹੀਂ ਸਾਡੀ ਸਾਈਟ ਦਾ ਮੁਦਰੀਕਰਨ ਕਰਦੇ ਹਾਂ। ਅਸੀਂ ਪ੍ਰਸ਼ੰਸਾ ਕਰਾਂਗੇ ਜੇਕਰ ਤੁਸੀਂ ਸਾਡੀ ਸਾਈਟ ਨੂੰ ਦੇਖਦੇ ਹੋਏ ਆਪਣੇ ਵਿਗਿਆਪਨ ਬਲੌਕਰ ਨੂੰ ਹਟਾ ਦਿੰਦੇ ਹੋ।